xref: /llvm-project/llvm/test/CodeGen/X86/2008-12-23-crazy-address.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-- -relocation-model=static | FileCheck %s
3
4@X = external dso_local global [0 x i32]
5
6define void @foo() nounwind {
7; CHECK-LABEL: foo:
8; CHECK:       # %bb.0: # %entry
9; CHECK-NEXT:    pushl %eax
10; CHECK-NEXT:    movl %esp, %eax
11; CHECK-NEXT:    pushl %eax
12; CHECK-NEXT:    calll frob@PLT
13; CHECK-NEXT:    addl $4, %esp
14; CHECK-NEXT:    leal X(%esp), %eax
15; CHECK-NEXT:    pushl %eax
16; CHECK-NEXT:    calll borf@PLT
17; CHECK-NEXT:    addl $4, %esp
18; CHECK-NEXT:    popl %eax
19; CHECK-NEXT:    retl
20entry:
21	%Y = alloca i32
22	call void @frob(ptr %Y) nounwind
23	%ctg2 = getelementptr i8, ptr %Y, i32 ptrtoint (ptr @X to i32)
24	%0 = ptrtoint ptr %ctg2 to i32
25	call void @borf(i32 %0) nounwind
26	ret void
27}
28
29define void @bar(i32 %i) nounwind {
30; CHECK-LABEL: bar:
31; CHECK:       # %bb.0: # %entry
32; CHECK-NEXT:    pushl %esi
33; CHECK-NEXT:    subl $40, %esp
34; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %esi
35; CHECK-NEXT:    movl %esp, %eax
36; CHECK-NEXT:    pushl %eax
37; CHECK-NEXT:    calll frob@PLT
38; CHECK-NEXT:    addl $4, %esp
39; CHECK-NEXT:    leal X(%esp,%esi,4), %eax
40; CHECK-NEXT:    pushl %eax
41; CHECK-NEXT:    calll borf@PLT
42; CHECK-NEXT:    addl $44, %esp
43; CHECK-NEXT:    popl %esi
44; CHECK-NEXT:    retl
45entry:
46	%Y = alloca [10 x i32]
47	call void @frob(ptr %Y) nounwind
48	%0 = getelementptr [0 x i32], ptr @X, i32 0, i32 %i
49	%1 = ptrtoint ptr %Y to i32
50	%ctg2 = getelementptr i8, ptr %0, i32 %1
51	%2 = ptrtoint ptr %ctg2 to i32
52	call void @borf(i32 %2) nounwind
53	ret void
54}
55
56declare void @frob(ptr)
57
58declare void @borf(i32)
59