| ; 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 |