[LLVMbugs] [Bug 4589] Invalid GEP optimization after bitcast
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Sun Jul 19 20:05:48 PDT 2009
http://llvm.org/bugs/show_bug.cgi?id=4589
Bill Wendling <wendling at apple.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |wendling at apple.com
Status|NEW |RESOLVED
Resolution| |WORKSFORME
--- Comment #1 from Bill Wendling <wendling at apple.com> 2009-07-19 22:05:45 ---
I'm assuming that the original code is this:
$ cat t.c
#include <inttypes.h>
struct dt {
int32_t f1;
int32_t *f2;
};
int32_t **get_el(char *arg) {
struct dt *ptr = (struct dt*)arg;
return &ptr->f2;
}
On a 32-bit machine, we get:
$ llvm-gcc -o - t.c -S -emit-llvm -Os
; ModuleID = 't.c'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
target triple = "i386-apple-darwin9.8"
define i32** @get_el(i8* %arg) nounwind readnone optsize {
entry:
%0 = getelementptr i8* %arg, i32 4 ; <i8*> [#uses=1]
%1 = bitcast i8* %0 to i32** ; <i32**> [#uses=1]
ret i32** %1
}
On a 64-bit machine, we get:
$ llvm-gcc -o - t.c -S -emit-llvm -Os -m64
; ModuleID = 't.c'
target datalayout =
"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
target triple = "x86_64-apple-darwin9.8"
define i32** @get_el(i8* %arg) nounwind readnone optsize {
entry:
%0 = getelementptr i8* %arg, i64 8 ; <i8*> [#uses=1]
%1 = bitcast i8* %0 to i32** ; <i32**> [#uses=1]
ret i32** %1
}
Both of which are correct.
Note, that LLVM code is not 100% platform independent. Because of specifics of
languages, the LLVM IR that's generated is much different for, say, 32-bit
machines as opposed to 64-bit machines.
--
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