| ; RUN: llc < %s -relocation-model=pic -mtriple=x86_64-pc-linux | FileCheck %s | |
| ; RUN: llc < %s -relocation-model=pic -mtriple=i386-pc-linux | FileCheck --check-prefix=I386 %s | |
| @foo1 = extern_weak hidden global i32, align 4 | |
| define i32* @bar1() { | |
| ret i32* @foo1 | |
| } | |
| ; CHECK: bar1: | |
| ; CHECK: movq foo1@GOTPCREL(%rip), %rax | |
| ; I386: bar1: | |
| ; I386: movl foo1@GOT(%eax), %eax | |
| @foo2 = external hidden global i32, align 4 | |
| define i32* @bar2() { | |
| ret i32* @foo2 | |
| } | |
| ; CHECK: bar2: | |
| ; CHECK: leaq foo2(%rip), %rax | |
| ; I386: bar2: | |
| ; I386: leal foo2@GOTOFF(%eax), %eax | |
| declare extern_weak hidden void @foo3() | |
| define void @bar3() { | |
| call void @foo3() | |
| ret void | |
| } | |
| ; CHECK: bar3: | |
| ; CHECK: callq foo3 | |
| ; I386: bar3: | |
| ; I386: calll foo3 | |
| declare external hidden void @foo4() | |
| define void @bar4() { | |
| call void @foo4() | |
| ret void | |
| } | |
| ; CHECK: bar4: | |
| ; CHECK: callq foo4 | |
| ; I386: bar4: | |
| ; I386: calll foo4 | |
| declare extern_weak hidden i32 @foo5() | |
| define i32()* @bar5() { | |
| ret i32()* @foo5 | |
| } | |
| ; CHECK: bar5: | |
| ; CHECK: movq foo5@GOTPCREL(%rip), %rax | |
| ; I386: bar5: | |
| ; I386: movl foo5@GOT(%eax), %eax | |
| declare external hidden i32 @foo6() | |
| define i32()* @bar6() { | |
| ret i32()* @foo6 | |
| } | |
| ; CHECK: bar6: | |
| ; CHECK: leaq foo6(%rip), %rax | |
| ; I386: bar6: | |
| ; I386: leal foo6@GOTOFF(%eax), %eax |