[LLVMbugs] [Bug 13727] New: Target constant materialization in fast-isel doesn't handle non-small code model reliably

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Aug 29 17:05:05 PDT 2012


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

             Bug #: 13727
           Summary: Target constant materialization in fast-isel doesn't
                    handle non-small code model reliably
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: release blocker
          Priority: P
         Component: Backend: X86
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: michael.liao at intel.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Created attachment 9135
  --> http://llvm.org/bugs/attachment.cgi?id=9135
test case triggering this issue

the attached test case crash on 64-bit Linux (LLVM trunk r) with the following
output:


$ lli -use-mcjit -O0 bug.ll 
lli:
/home/buck/working/llvm/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:213:
void llvm::RuntimeDyldELF::resolveX86_64Relocation(uint8_t*, uint64_t,
uint64_t, uint32_t, int64_t): Assertion `(Type == ELF::R_X86_64_32 && (Value <=
(4294967295U))) || (Type == ELF::R_X86_64_32S && ((int64_t)Value <=
(2147483647) && (int64_t)Value >= (-2147483647-1)))' failed.
Stack dump:
0.    Program arguments: lli -use-mcjit -O0 bug.ll 
Aborted (core dumped)

The assertion reports an overflow of a 32-bit relative addressing even though
MCJIT is designed to use large code model.

After investigation, it's turned out that target constant materialization in
x86's fast-isel doesn't handle large code model reliably by generate
PC-relative addressing which trigger this assertion when .rodata section is
allocated faraway from code segment.

(PS: the test case is generated by copying
test/ExecutionEngine/MCJIT/test-common-symbols.ll and applying the following
patch, i.e. changing constant 1.0 to 1.1

$ diff -u test/ExecutionEngine/MCJIT/test-common-symbols.ll bug.ll 
--- test/ExecutionEngine/MCJIT/test-common-symbols.ll    2012-08-29
16:32:56.632968836 -0700
+++ bug.ll    2012-08-29 16:54:02.612934213 -0700
@@ -37,7 +37,7 @@
   %arrayidx = getelementptr inbounds [10 x i32]* @zero_arr, i32 0, i64
%idxprom
   store i32 40, i32* %arrayidx, align 4
   %1 = load double* @zero_double, align 8
-  %cmp = fcmp olt double %1, 1.000000e+00
+  %cmp = fcmp olt double %1, 1.100000e+00
   br i1 %cmp, label %if.then, label %if.end

 if.then:                                          ; preds = %entry

)

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list