[LLVMdev] Why extra 4 bytes on stack ???
Alexander Potapenko
ramosian.glider at gmail.com
Thu Feb 2 00:35:51 PST 2012
On Thu, Feb 2, 2012 at 12:25 PM, Umesh Kalappa <umesh.kalappa0 at gmail.com> wrote:
> Hi There ,
>
> Again ,I'm newbie to LLVM and please pardon me ..if you guys feel that
> ,the below question is very basic :)
>
> Here i go ,compiled the below sample with clang i.e clang enum.c -S
> -emit-llvm and there respective file are
>
> $ cat enum.c
> int main()
> {
> enum type{one=1,two,three} s;
> s = one;
> return s;
> }
>
> $ cat enum.s
> ; ModuleID = 'enum.c'
> target datalayout =
> "e-p:32:32:32-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-f80:32:32-n8:16:32-S32"
> target triple = "i386-pc-cygwin"
>
> define i32 @main() nounwind {
> %1 = alloca i32, align 4
> %s = alloca i32, align 4
> store i32 0, i32* %1
> store i32 1, i32* %s, align 4
> %2 = load i32* %s, align 4
> ret i32 %2
> }
>
> Question : Why there is extra 4 bytes on stack i.e "%1 = alloca i32, align
> 4" ???
>
> Thanks
> Umesh
>
For some reason even the simplest "int main() { return 0; }" program
allocates those four bytes:
; ModuleID = '/tmp/webcompile/_29079_0.bc'
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-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define i32 @main() nounwind uwtable {
%1 = alloca i32, align 4
store i32 0, i32* %1
ret i32 0
}
More information about the llvm-dev
mailing list