[LLVMbugs] [Bug 21148] New: Induction Variable Simplification Pass promotes i32 operations to i64

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Oct 3 07:13:10 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=21148

            Bug ID: 21148
           Summary: Induction Variable Simplification Pass promotes i32
                    operations to i64
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: tstellar at gmail.com
                CC: atrick at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Created attachment 13130
  --> http://llvm.org/bugs/attachment.cgi?id=13130&action=edit
Test Case

I've run into the issue where the Induction Variable Simplification Pass will
promote i32 operations to i64, which negatively impacts performance on AMDGPU
targets.

The problem occurs when the induction variable is used for address calculations
of pointers with different sizes.   For example:


kernel void test(global int *out, int a) {

  private int array[16];
...
  for (int i = 0; i < 16; i++)
    out[i * 3 + a] = array[i];
}

Here global pointers are 64-bit and private pointers are 32-bit.  In this case
the indvars pass tries to promote the induction variable to 64 bits which
causes the address calculations for the out pointer to be 64-bit operations.

I've attached an LLVM IR test case the demonstrates the issue.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20141003/877ce4f0/attachment.html>


More information about the llvm-bugs mailing list