[LLVMbugs] [Bug 19048] New: GEP on struct pointer obtained from bitcast canonicalized incorrectly

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Mar 4 16:43:10 PST 2014


            Bug ID: 19048
           Summary: GEP on struct pointer obtained from bitcast
                    canonicalized incorrectly
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: benjamin at spacecurve.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Created attachment 12187
  --> http://llvm.org/bugs/attachment.cgi?id=12187&action=edit
Misoptimized testcase

In the attached code, if a datalayout declaration is present the instructions

  %variant_source = bitcast i16* %dataload_case_ptr to { i16, i64 }*
  %8 = getelementptr inbounds { i16, i64 }* %variant_source, i32 0, i32 1
  %9 = load i64* %8
  store i64 %9, i64* %1, align 8

get transformed by opt -O3 into

  %6 = getelementptr inbounds i16* %5, i64 4
  %7 = bitcast i16* %6 to i64*
  %8 = load i64* %7, align 8
  store i64 %8, i64* %1, align 8

If the datalayout is removed, the bitcast is instead deleted entirely and
retains the correct GEP form, at which point returning the datalayout once more
and re-optimizing correctly reduces the entire function to 'ret i8 1', which is
ideally what would happen regardless. Presumably the noncanonical form
interferes with further optimizations.

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/20140305/959f0804/attachment.html>

More information about the llvm-bugs mailing list