[LLVMbugs] [Bug 6394] Optimizer swaps bitcast and getelementptr in an invalid way
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Mon Jan 17 14:12:04 PST 2011
http://llvm.org/bugs/show_bug.cgi?id=6394
Henning Thielemann <llvm at henning-thielemann.de> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|WORKSFORME |
--- Comment #10 from Henning Thielemann <llvm at henning-thielemann.de> 2011-01-17 16:12:03 CST ---
I have snooped the calls to LLVM of my Haskell program using ltrace
and turned the output into a stand-alone C program.
Attached is this program that should work like 'opt -O1'.
It reads a Bitcode file from stdin, sets target data and writes back to stdout.
If I do not set target data, the optimized code is correct.
I have not written the Haskell code that calls the LLVMAddTargetData function,
but I could remove it, if this is wrong.
Nevertheless I wonder, why setting the target data this way makes the optimizer
go wrong
and I wonder, why I can set arbitrary strings like "foobar" that yield the same
optimizer misbehaviour.
I think either LLVMCreateTargetData or LLVMAddTargetData should at least have
an assert for nonsense strings.
Here is how I get the results:
$ cat opt64.ll
%wrap = type { float, <4 x float>* }
define void @_myfree(float*) {
_L1:
%1 = bitcast float* %0 to %wrap*
%2 = getelementptr %wrap* %1, i32 0, i32 1
%3 = load <4 x float>** %2
free <4 x float>* %3
ret void
}
$ llvm-as -f opt64.ll
$ gcc -lLLVM-2.8rc `llvm-config --cflags` -o opt64simplec opt64simplec.c
$ opt64simplec <opt64.bc >opt64-opt.bc
$ llvm-dis -o opt64-opt-dis.ll -f opt64-opt.bc
$ cat pt64-opt-dis.ll
; ModuleID = 'opt64-opt.bc'
define void @_myfree(float* nocapture) nounwind {
_L1:
%1 = getelementptr float* %0, i64 2
%2 = bitcast float* %1 to <4 x float>**
%3 = load <4 x float>** %2, align 8
%4 = bitcast <4 x float>* %3 to i8*
tail call void @free(i8* %4)
ret void
}
declare void @free(i8* nocapture) nounwind
--
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