wiki:ParabixLLVM

Version 7 (modified by cameron, 3 years ago) (diff)

--

The Parabix with LLVM Project

This project investigates the use of LLVM as a back end for Parabix technologies.

Working with LLVM Tools

Some demos of LLVM tools in action.

Subprojects

Architecture Independent IDISA Libraries

Meng Lin is looking at creating architecture independent IDISA libraries, see: source:trunk/libgen/llvm_header

Direct IDISA Support in LLVM Code Generation

Is it possible to have LLVM directly support all power-of-2 types directly in the code generation system?

Example: 2-bit Fields

There can be some applications of 2-bit integer fields, i.e., the SIMD vector type <64 x i2> for 128-bit SIMD registers.

Can this be implemented in a generic way as follows:

  1. Make it a legal type in the SelectionDAG LegalizeTypes phase.
  2. Create implementations of the standard vector operations and rule out all others in the SelectionDAG Legalize phase.
  3. Implement each operation using bitwise logic on the 2 positions of each field.

Support for i128, i256, i512 Types

Parabix applications need long stream addition, subtraction and shift operations. There are standard ways of implementing these, including our parallel long-stream addition algorithm. Can these be integrated into LLVM?

The LongInteger project involves systematic support of the i256 type on LLVM, taking advantage of AVX2 instructions on the latest Intel Haswell chips.

ShuffleVector

The ShuffleVector project investigates systematic support of the LLVM shufflevector operation, and optimized support in the case of various patterns for shuffle masks as compile-time constants.

SSE2 Hoisting

The SSE2 Hoisting project investigates the raising of SSE2 intrinsic operations into generic LLVM IR operations, thereby creating the possibility of executing SSE2 code on different architectures.

LLVM Reading

Information on Extending LLVM to add new intrinsics, SelectionDAG nodes, instructions and types outlines the steps necessary to start working with the compiler on new facilities.

The LLVM Target Independent Code Generator is the key document describing the inner workings of code generation for various platforms.

Issues

The I2Result demo shows a problem with i2 results.