[llvm] r352476 - [X86] Fix linux32 pic tests to use correct relocation model (PR39684)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 29 02:41:48 PST 2019


Author: rksimon
Date: Tue Jan 29 02:41:48 2019
New Revision: 352476

URL: http://llvm.org/viewvc/llvm-project?rev=352476&view=rev
Log:
[X86] Fix linux32 pic tests to use correct relocation model (PR39684)

Differential Revision: https://reviews.llvm.org/D57301

Modified:
    llvm/trunk/test/CodeGen/X86/abi-isel.ll

Modified: llvm/trunk/test/CodeGen/X86/abi-isel.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/abi-isel.ll?rev=352476&r1=352475&r2=352476&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/abi-isel.ll (original)
+++ llvm/trunk/test/CodeGen/X86/abi-isel.ll Tue Jan 29 02:41:48 2019
@@ -3,7 +3,7 @@
 
 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-STATIC
 ; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-STATIC
-; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-PIC
+; RUN: llc < %s -mcpu=generic -mtriple=i686-unknown-linux-gnu -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-32-PIC
 ; RUN: llc < %s -mcpu=generic -mtriple=x86_64-unknown-linux-gnu -relocation-model=pic -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=LINUX-64-PIC
 
 ; RUN: llc < %s -mcpu=generic -mtriple=i686-apple-darwin -relocation-model=static -code-model=small -pre-RA-sched=list-ilp | FileCheck %s -check-prefix=DARWIN-32-STATIC
@@ -48,8 +48,15 @@ define void @foo00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl src, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, dst
+; LINUX-32-PIC-NEXT:    calll .L0$pb
+; LINUX-32-PIC-NEXT:  .L0$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp0:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo00:
@@ -131,8 +138,15 @@ define void @fxo00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: fxo00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl xsrc, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, xdst
+; LINUX-32-PIC-NEXT:    calll .L1$pb
+; LINUX-32-PIC-NEXT:  .L1$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp1:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.L1$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: fxo00:
@@ -212,7 +226,14 @@ define void @foo01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst, ptr
+; LINUX-32-PIC-NEXT:    calll .L2$pb
+; LINUX-32-PIC-NEXT:  .L2$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp2:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp2-.L2$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo01:
@@ -283,7 +304,14 @@ define void @fxo01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: fxo01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xdst, ptr
+; LINUX-32-PIC-NEXT:    calll .L3$pb
+; LINUX-32-PIC-NEXT:  .L3$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp3:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp3-.L3$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: fxo01:
@@ -358,9 +386,16 @@ define void @foo02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl src, %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, (%ecx)
+; LINUX-32-PIC-NEXT:    calll .L4$pb
+; LINUX-32-PIC-NEXT:  .L4$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp4:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp4-.L4$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo02:
@@ -451,9 +486,16 @@ define void @fxo02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: fxo02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl xsrc, %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, (%ecx)
+; LINUX-32-PIC-NEXT:    calll .L5$pb
+; LINUX-32-PIC-NEXT:  .L5$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp5:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp5-.L5$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: fxo02:
@@ -542,8 +584,15 @@ define void @foo03() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dsrc, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ddst
+; LINUX-32-PIC-NEXT:    calll .L6$pb
+; LINUX-32-PIC-NEXT:  .L6$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp6:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp6-.L6$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo03:
@@ -612,7 +661,14 @@ define void @foo04() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst, dptr
+; LINUX-32-PIC-NEXT:    calll .L7$pb
+; LINUX-32-PIC-NEXT:  .L7$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp7:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp7-.L7$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo04:
@@ -681,9 +737,16 @@ define void @foo05() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dsrc, %eax
-; LINUX-32-PIC-NEXT:    movl dptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, (%ecx)
+; LINUX-32-PIC-NEXT:    calll .L8$pb
+; LINUX-32-PIC-NEXT:  .L8$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp8:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp8-.L8$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl (%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo05:
@@ -762,8 +825,13 @@ define void @foo06() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lsrc, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ldst
+; LINUX-32-PIC-NEXT:    calll .L9$pb
+; LINUX-32-PIC-NEXT:  .L9$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp9:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp9-.L9$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, ldst at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo06:
@@ -830,7 +898,13 @@ define void @foo07() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst, lptr
+; LINUX-32-PIC-NEXT:    calll .L10$pb
+; LINUX-32-PIC-NEXT:  .L10$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp10:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp10-.L10$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, lptr at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo07:
@@ -898,9 +972,14 @@ define void @foo08() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: foo08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lsrc, %eax
-; LINUX-32-PIC-NEXT:    movl lptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, (%ecx)
+; LINUX-32-PIC-NEXT:    calll .L11$pb
+; LINUX-32-PIC-NEXT:  .L11$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp11:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp11-.L11$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: foo08:
@@ -977,8 +1056,15 @@ define void @qux00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl src+64, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, dst+64
+; LINUX-32-PIC-NEXT:    calll .L12$pb
+; LINUX-32-PIC-NEXT:  .L12$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp12:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp12-.L12$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux00:
@@ -1059,8 +1145,15 @@ define void @qxx00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qxx00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl xsrc+64, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, xdst+64
+; LINUX-32-PIC-NEXT:    calll .L13$pb
+; LINUX-32-PIC-NEXT:  .L13$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp13:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp13-.L13$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qxx00:
@@ -1139,7 +1232,15 @@ define void @qux01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst+64, ptr
+; LINUX-32-PIC-NEXT:    calll .L14$pb
+; LINUX-32-PIC-NEXT:  .L14$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp14:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp14-.L14$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    addl $64, %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux01:
@@ -1216,7 +1317,15 @@ define void @qxx01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qxx01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xdst+64, ptr
+; LINUX-32-PIC-NEXT:    calll .L15$pb
+; LINUX-32-PIC-NEXT:  .L15$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp15:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp15-.L15$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    addl $64, %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qxx01:
@@ -1297,9 +1406,16 @@ define void @qux02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl src+64, %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 64(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L16$pb
+; LINUX-32-PIC-NEXT:  .L16$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp16:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp16-.L16$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux02:
@@ -1391,9 +1507,16 @@ define void @qxx02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qxx02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl xsrc+64, %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 64(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L17$pb
+; LINUX-32-PIC-NEXT:  .L17$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp17:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp17-.L17$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qxx02:
@@ -1483,8 +1606,15 @@ define void @qux03() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dsrc+64, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ddst+64
+; LINUX-32-PIC-NEXT:    calll .L18$pb
+; LINUX-32-PIC-NEXT:  .L18$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp18:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp18-.L18$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux03:
@@ -1553,7 +1683,15 @@ define void @qux04() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst+64, dptr
+; LINUX-32-PIC-NEXT:    calll .L19$pb
+; LINUX-32-PIC-NEXT:  .L19$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp19:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp19-.L19$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    addl $64, %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux04:
@@ -1623,9 +1761,16 @@ define void @qux05() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dsrc+64, %eax
-; LINUX-32-PIC-NEXT:    movl dptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 64(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L20$pb
+; LINUX-32-PIC-NEXT:  .L20$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp20:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp20-.L20$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 64(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux05:
@@ -1705,8 +1850,13 @@ define void @qux06() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lsrc+64, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ldst+64
+; LINUX-32-PIC-NEXT:    calll .L21$pb
+; LINUX-32-PIC-NEXT:  .L21$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp21:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp21-.L21$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+64(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, ldst at GOTOFF+64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux06:
@@ -1773,7 +1923,13 @@ define void @qux07() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst+64, lptr
+; LINUX-32-PIC-NEXT:    calll .L22$pb
+; LINUX-32-PIC-NEXT:  .L22$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp22:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp22-.L22$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+64(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, lptr at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux07:
@@ -1841,9 +1997,14 @@ define void @qux08() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: qux08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lsrc+64, %eax
-; LINUX-32-PIC-NEXT:    movl lptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 64(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L23$pb
+; LINUX-32-PIC-NEXT:  .L23$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp23:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp23-.L23$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+64(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 64(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: qux08:
@@ -1922,9 +2083,16 @@ define void @ind00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl src(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, dst(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L24$pb
+; LINUX-32-PIC-NEXT:  .L24$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp24:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp24-.L24$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind00:
@@ -2011,9 +2179,16 @@ define void @ixd00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ixd00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl xsrc(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, xdst(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L25$pb
+; LINUX-32-PIC-NEXT:  .L25$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp25:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp25-.L25$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ixd00:
@@ -2100,9 +2275,16 @@ define void @ind01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dst(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ptr
+; LINUX-32-PIC-NEXT:    calll .L26$pb
+; LINUX-32-PIC-NEXT:  .L26$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp26:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp26-.L26$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    shll $2, %ecx
+; LINUX-32-PIC-NEXT:    addl dst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind01:
@@ -2187,9 +2369,16 @@ define void @ixd01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ixd01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal xdst(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ptr
+; LINUX-32-PIC-NEXT:    calll .L27$pb
+; LINUX-32-PIC-NEXT:  .L27$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp27:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp27-.L27$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    shll $2, %ecx
+; LINUX-32-PIC-NEXT:    addl xdst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ixd01:
@@ -2276,10 +2465,17 @@ define void @ind02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl src(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl ptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, (%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L28$pb
+; LINUX-32-PIC-NEXT:  .L28$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp28:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp28-.L28$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind02:
@@ -2376,10 +2572,17 @@ define void @ixd02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ixd02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl xsrc(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl ptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, (%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L29$pb
+; LINUX-32-PIC-NEXT:  .L29$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp29:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp29-.L29$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ixd02:
@@ -2474,9 +2677,16 @@ define void @ind03(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dsrc(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, ddst(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L30$pb
+; LINUX-32-PIC-NEXT:  .L30$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp30:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp30-.L30$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind03:
@@ -2559,9 +2769,16 @@ define void @ind04(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ddst(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, dptr
+; LINUX-32-PIC-NEXT:    calll .L31$pb
+; LINUX-32-PIC-NEXT:  .L31$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp31:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp31-.L31$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    shll $2, %ecx
+; LINUX-32-PIC-NEXT:    addl ddst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind04:
@@ -2641,10 +2858,17 @@ define void @ind05(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dsrc(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl dptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, (%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L32$pb
+; LINUX-32-PIC-NEXT:  .L32$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp32:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp32-.L32$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl (%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind05:
@@ -2732,9 +2956,14 @@ define void @ind06(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lsrc(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, ldst(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L33$pb
+; LINUX-32-PIC-NEXT:  .L33$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp33:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp33-.L33$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF(%eax,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl %edx, ldst at GOTOFF(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind06:
@@ -2817,9 +3046,14 @@ define void @ind07(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ldst(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, lptr
+; LINUX-32-PIC-NEXT:    calll .L34$pb
+; LINUX-32-PIC-NEXT:  .L34$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp34:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp34-.L34$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF(%eax,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, lptr at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind07:
@@ -2898,10 +3132,15 @@ define void @ind08(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ind08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lsrc(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl lptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, (%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L35$pb
+; LINUX-32-PIC-NEXT:  .L35$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp35:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp35-.L35$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF(%eax,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, (%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ind08:
@@ -2988,9 +3227,16 @@ define void @off00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl src+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, dst+64(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L36$pb
+; LINUX-32-PIC-NEXT:  .L36$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp36:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp36-.L36$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off00:
@@ -3078,9 +3324,16 @@ define void @oxf00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: oxf00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, xdst+64(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L37$pb
+; LINUX-32-PIC-NEXT:  .L37$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp37:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp37-.L37$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: oxf00:
@@ -3168,9 +3421,16 @@ define void @off01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dst+64(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ptr
+; LINUX-32-PIC-NEXT:    calll .L38$pb
+; LINUX-32-PIC-NEXT:  .L38$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp38:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp38-.L38$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off01:
@@ -3256,9 +3516,16 @@ define void @oxf01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: oxf01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal xdst+64(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ptr
+; LINUX-32-PIC-NEXT:    calll .L39$pb
+; LINUX-32-PIC-NEXT:  .L39$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp39:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp39-.L39$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: oxf01:
@@ -3346,10 +3613,17 @@ define void @off02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl src+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl ptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L40$pb
+; LINUX-32-PIC-NEXT:  .L40$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp40:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp40-.L40$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off02:
@@ -3447,10 +3721,17 @@ define void @oxf02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: oxf02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl xsrc+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl ptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L41$pb
+; LINUX-32-PIC-NEXT:  .L41$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp41:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp41-.L41$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: oxf02:
@@ -3546,9 +3827,16 @@ define void @off03(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, ddst+64(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L42$pb
+; LINUX-32-PIC-NEXT:  .L42$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp42:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp42-.L42$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off03:
@@ -3632,9 +3920,16 @@ define void @off04(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ddst+64(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, dptr
+; LINUX-32-PIC-NEXT:    calll .L43$pb
+; LINUX-32-PIC-NEXT:  .L43$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp43:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp43-.L43$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    leal 64(%edx,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off04:
@@ -3715,10 +4010,17 @@ define void @off05(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dsrc+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl dptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L44$pb
+; LINUX-32-PIC-NEXT:  .L44$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp44:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp44-.L44$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 64(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off05:
@@ -3807,9 +4109,14 @@ define void @off06(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, ldst+64(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L45$pb
+; LINUX-32-PIC-NEXT:  .L45$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp45:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp45-.L45$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+64(%eax,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl %edx, ldst at GOTOFF+64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off06:
@@ -3893,9 +4200,14 @@ define void @off07(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ldst+64(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, lptr
+; LINUX-32-PIC-NEXT:    calll .L46$pb
+; LINUX-32-PIC-NEXT:  .L46$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp46:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp46-.L46$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+64(%eax,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, lptr at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off07:
@@ -3975,10 +4287,15 @@ define void @off08(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: off08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lsrc+64(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl lptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 64(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L47$pb
+; LINUX-32-PIC-NEXT:  .L47$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp47:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp47-.L47$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+64(%eax,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 64(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: off08:
@@ -4065,8 +4382,15 @@ define void @moo00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl src+262144, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, dst+262144
+; LINUX-32-PIC-NEXT:    calll .L48$pb
+; LINUX-32-PIC-NEXT:  .L48$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp48:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp48-.L48$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo00:
@@ -4145,7 +4469,15 @@ define void @moo01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst+262144, ptr
+; LINUX-32-PIC-NEXT:    calll .L49$pb
+; LINUX-32-PIC-NEXT:  .L49$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp49:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp49-.L49$pb), %eax
+; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl dst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo01:
@@ -4226,9 +4558,16 @@ define void @moo02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl src+262144, %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 262144(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L50$pb
+; LINUX-32-PIC-NEXT:  .L50$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp50:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp50-.L50$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo02:
@@ -4318,8 +4657,15 @@ define void @moo03(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dsrc+262144, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ddst+262144
+; LINUX-32-PIC-NEXT:    calll .L51$pb
+; LINUX-32-PIC-NEXT:  .L51$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp51:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp51-.L51$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo03:
@@ -4388,7 +4734,15 @@ define void @moo04(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst+262144, dptr
+; LINUX-32-PIC-NEXT:    calll .L52$pb
+; LINUX-32-PIC-NEXT:  .L52$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp52:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp52-.L52$pb), %eax
+; LINUX-32-PIC-NEXT:    movl $262144, %ecx # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl ddst at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo04:
@@ -4458,9 +4812,16 @@ define void @moo05(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dsrc+262144, %eax
-; LINUX-32-PIC-NEXT:    movl dptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 262144(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L53$pb
+; LINUX-32-PIC-NEXT:  .L53$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp53:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp53-.L53$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl 262144(%ecx), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo05:
@@ -4540,8 +4901,13 @@ define void @moo06(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lsrc+262144, %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ldst+262144
+; LINUX-32-PIC-NEXT:    calll .L54$pb
+; LINUX-32-PIC-NEXT:  .L54$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp54:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp54-.L54$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+262144(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, ldst at GOTOFF+262144(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo06:
@@ -4608,7 +4974,13 @@ define void @moo07(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst+262144, lptr
+; LINUX-32-PIC-NEXT:    calll .L55$pb
+; LINUX-32-PIC-NEXT:  .L55$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp55:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp55-.L55$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+262144(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, lptr at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo07:
@@ -4676,9 +5048,14 @@ define void @moo08(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: moo08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lsrc+262144, %eax
-; LINUX-32-PIC-NEXT:    movl lptr, %ecx
-; LINUX-32-PIC-NEXT:    movl %eax, 262144(%ecx)
+; LINUX-32-PIC-NEXT:    calll .L56$pb
+; LINUX-32-PIC-NEXT:  .L56$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp56:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp56-.L56$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+262144(%eax), %ecx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: moo08:
@@ -4757,9 +5134,16 @@ define void @big00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl src+262144(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, dst+262144(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L57$pb
+; LINUX-32-PIC-NEXT:  .L57$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp57:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp57-.L57$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big00:
@@ -4847,9 +5231,16 @@ define void @big01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dst+262144(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, ptr
+; LINUX-32-PIC-NEXT:    calll .L58$pb
+; LINUX-32-PIC-NEXT:  .L58$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp58:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp58-.L58$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big01:
@@ -4937,10 +5328,17 @@ define void @big02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl src+262144(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl ptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L59$pb
+; LINUX-32-PIC-NEXT:  .L59$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp59:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp59-.L59$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big02:
@@ -5036,9 +5434,16 @@ define void @big03(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, ddst+262144(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L60$pb
+; LINUX-32-PIC-NEXT:  .L60$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp60:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp60-.L60$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big03:
@@ -5122,9 +5527,16 @@ define void @big04(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ddst+262144(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, dptr
+; LINUX-32-PIC-NEXT:    calll .L61$pb
+; LINUX-32-PIC-NEXT:  .L61$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp61:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp61-.L61$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    leal 262144(%edx,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %ecx, (%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big04:
@@ -5205,10 +5617,17 @@ define void @big05(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dsrc+262144(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl dptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L62$pb
+; LINUX-32-PIC-NEXT:  .L62$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp62:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp62-.L62$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %edx
+; LINUX-32-PIC-NEXT:    movl 262144(%edx,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big05:
@@ -5297,9 +5716,14 @@ define void @big06(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl %ecx, ldst+262144(,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L63$pb
+; LINUX-32-PIC-NEXT:  .L63$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp63:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp63-.L63$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+262144(%eax,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl %edx, ldst at GOTOFF+262144(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big06:
@@ -5383,9 +5807,14 @@ define void @big07(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ldst+262144(,%eax,4), %eax
-; LINUX-32-PIC-NEXT:    movl %eax, lptr
+; LINUX-32-PIC-NEXT:    calll .L64$pb
+; LINUX-32-PIC-NEXT:  .L64$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp64:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp64-.L64$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+262144(%eax,%ecx,4), %ecx
+; LINUX-32-PIC-NEXT:    movl %ecx, lptr at GOTOFF(%eax)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big07:
@@ -5465,10 +5894,15 @@ define void @big08(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: big08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lsrc+262144(,%eax,4), %ecx
-; LINUX-32-PIC-NEXT:    movl lptr, %edx
-; LINUX-32-PIC-NEXT:    movl %ecx, 262144(%edx,%eax,4)
+; LINUX-32-PIC-NEXT:    calll .L65$pb
+; LINUX-32-PIC-NEXT:  .L65$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp65:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp65-.L65$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lsrc at GOTOFF+262144(%eax,%ecx,4), %edx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl %edx, 262144(%eax,%ecx,4)
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: big08:
@@ -5553,7 +5987,12 @@ define i8* @bar00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $src, %eax
+; LINUX-32-PIC-NEXT:    calll .L66$pb
+; LINUX-32-PIC-NEXT:  .L66$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp66:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp66-.L66$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar00:
@@ -5611,7 +6050,12 @@ define i8* @bxr00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bxr00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xsrc, %eax
+; LINUX-32-PIC-NEXT:    calll .L67$pb
+; LINUX-32-PIC-NEXT:  .L67$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp67:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp67-.L67$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bxr00:
@@ -5669,7 +6113,12 @@ define i8* @bar01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst, %eax
+; LINUX-32-PIC-NEXT:    calll .L68$pb
+; LINUX-32-PIC-NEXT:  .L68$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp68:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp68-.L68$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar01:
@@ -5727,7 +6176,12 @@ define i8* @bxr01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bxr01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xdst, %eax
+; LINUX-32-PIC-NEXT:    calll .L69$pb
+; LINUX-32-PIC-NEXT:  .L69$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp69:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp69-.L69$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bxr01:
@@ -5785,7 +6239,12 @@ define i8* @bar02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L70$pb
+; LINUX-32-PIC-NEXT:  .L70$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp70:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp70-.L70$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar02:
@@ -5843,7 +6302,12 @@ define i8* @bar03() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dsrc, %eax
+; LINUX-32-PIC-NEXT:    calll .L71$pb
+; LINUX-32-PIC-NEXT:  .L71$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp71:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp71-.L71$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar03:
@@ -5901,7 +6365,12 @@ define i8* @bar04() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst, %eax
+; LINUX-32-PIC-NEXT:    calll .L72$pb
+; LINUX-32-PIC-NEXT:  .L72$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp72:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp72-.L72$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar04:
@@ -5959,7 +6428,12 @@ define i8* @bar05() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L73$pb
+; LINUX-32-PIC-NEXT:  .L73$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp73:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp73-.L73$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar05:
@@ -6017,7 +6491,12 @@ define i8* @bar06() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $lsrc, %eax
+; LINUX-32-PIC-NEXT:    calll .L74$pb
+; LINUX-32-PIC-NEXT:  .L74$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp74:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp74-.L74$pb), %eax
+; LINUX-32-PIC-NEXT:    leal lsrc at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar06:
@@ -6075,7 +6554,12 @@ define i8* @bar07() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst, %eax
+; LINUX-32-PIC-NEXT:    calll .L75$pb
+; LINUX-32-PIC-NEXT:  .L75$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp75:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp75-.L75$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar07:
@@ -6133,7 +6617,12 @@ define i8* @bar08() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bar08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $lptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L76$pb
+; LINUX-32-PIC-NEXT:  .L76$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp76:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp76-.L76$pb), %eax
+; LINUX-32-PIC-NEXT:    leal lptr at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bar08:
@@ -6191,7 +6680,12 @@ define i8* @har00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $src, %eax
+; LINUX-32-PIC-NEXT:    calll .L77$pb
+; LINUX-32-PIC-NEXT:  .L77$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp77:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp77-.L77$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har00:
@@ -6249,7 +6743,12 @@ define i8* @hxr00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: hxr00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xsrc, %eax
+; LINUX-32-PIC-NEXT:    calll .L78$pb
+; LINUX-32-PIC-NEXT:  .L78$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp78:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp78-.L78$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: hxr00:
@@ -6307,7 +6806,12 @@ define i8* @har01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst, %eax
+; LINUX-32-PIC-NEXT:    calll .L79$pb
+; LINUX-32-PIC-NEXT:  .L79$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp79:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp79-.L79$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har01:
@@ -6365,7 +6869,12 @@ define i8* @hxr01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: hxr01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xdst, %eax
+; LINUX-32-PIC-NEXT:    calll .L80$pb
+; LINUX-32-PIC-NEXT:  .L80$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp80:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp80-.L80$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: hxr01:
@@ -6423,7 +6932,13 @@ define i8* @har02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl ptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L81$pb
+; LINUX-32-PIC-NEXT:  .L81$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp81:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp81-.L81$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har02:
@@ -6489,7 +7004,12 @@ define i8* @har03() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dsrc, %eax
+; LINUX-32-PIC-NEXT:    calll .L82$pb
+; LINUX-32-PIC-NEXT:  .L82$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp82:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp82-.L82$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har03:
@@ -6547,7 +7067,12 @@ define i8* @har04() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst, %eax
+; LINUX-32-PIC-NEXT:    calll .L83$pb
+; LINUX-32-PIC-NEXT:  .L83$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp83:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp83-.L83$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har04:
@@ -6605,7 +7130,13 @@ define i8* @har05() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L84$pb
+; LINUX-32-PIC-NEXT:  .L84$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp84:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp84-.L84$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har05:
@@ -6666,7 +7197,12 @@ define i8* @har06() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $lsrc, %eax
+; LINUX-32-PIC-NEXT:    calll .L85$pb
+; LINUX-32-PIC-NEXT:  .L85$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp85:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp85-.L85$pb), %eax
+; LINUX-32-PIC-NEXT:    leal lsrc at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har06:
@@ -6724,7 +7260,12 @@ define i8* @har07() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst, %eax
+; LINUX-32-PIC-NEXT:    calll .L86$pb
+; LINUX-32-PIC-NEXT:  .L86$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp86:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp86-.L86$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har07:
@@ -6782,7 +7323,12 @@ define i8* @har08() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: har08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L87$pb
+; LINUX-32-PIC-NEXT:  .L87$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp87:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp87-.L87$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: har08:
@@ -6842,7 +7388,13 @@ define i8* @bat00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $src+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L88$pb
+; LINUX-32-PIC-NEXT:  .L88$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp88:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp88-.L88$pb), %eax
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bat00:
@@ -6906,7 +7458,13 @@ define i8* @bxt00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bxt00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xsrc+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L89$pb
+; LINUX-32-PIC-NEXT:  .L89$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp89:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp89-.L89$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bxt00:
@@ -6970,7 +7528,13 @@ define i8* @bat01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L90$pb
+; LINUX-32-PIC-NEXT:  .L90$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp90:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp90-.L90$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bat01:
@@ -7034,7 +7598,13 @@ define i8* @bxt01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bxt01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xdst+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L91$pb
+; LINUX-32-PIC-NEXT:  .L91$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp91:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp91-.L91$pb), %eax
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bxt01:
@@ -7100,7 +7670,13 @@ define i8* @bat02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl ptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L92$pb
+; LINUX-32-PIC-NEXT:  .L92$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp92:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp92-.L92$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
 ; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
@@ -7175,7 +7751,13 @@ define i8* @bat03() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dsrc+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L93$pb
+; LINUX-32-PIC-NEXT:  .L93$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp93:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp93-.L93$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bat03:
@@ -7234,7 +7816,13 @@ define i8* @bat04() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L94$pb
+; LINUX-32-PIC-NEXT:  .L94$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp94:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp94-.L94$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bat04:
@@ -7295,7 +7883,13 @@ define i8* @bat05() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl dptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L95$pb
+; LINUX-32-PIC-NEXT:  .L95$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp95:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp95-.L95$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
 ; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
@@ -7365,7 +7959,12 @@ define i8* @bat06() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $lsrc+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L96$pb
+; LINUX-32-PIC-NEXT:  .L96$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp96:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp96-.L96$pb), %eax
+; LINUX-32-PIC-NEXT:    leal lsrc at GOTOFF+64(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bat06:
@@ -7423,7 +8022,12 @@ define i8* @bat07() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst+64, %eax
+; LINUX-32-PIC-NEXT:    calll .L97$pb
+; LINUX-32-PIC-NEXT:  .L97$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp97:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp97-.L97$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+64(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bat07:
@@ -7483,7 +8087,12 @@ define i8* @bat08() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bat08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl lptr, %eax
+; LINUX-32-PIC-NEXT:    calll .L98$pb
+; LINUX-32-PIC-NEXT:  .L98$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp98:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp98-.L98$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    addl $64, %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
@@ -7552,7 +8161,13 @@ define i8* @bam00() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $src+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L99$pb
+; LINUX-32-PIC-NEXT:  .L99$pb:
+; LINUX-32-PIC-NEXT:    popl %ecx
+; LINUX-32-PIC-NEXT:  .Ltmp99:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp99-.L99$pb), %ecx
+; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl src at GOT(%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam00:
@@ -7616,7 +8231,13 @@ define i8* @bam01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dst+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L100$pb
+; LINUX-32-PIC-NEXT:  .L100$pb:
+; LINUX-32-PIC-NEXT:    popl %ecx
+; LINUX-32-PIC-NEXT:  .Ltmp100:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp100-.L100$pb), %ecx
+; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl dst at GOT(%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam01:
@@ -7680,7 +8301,13 @@ define i8* @bxm01() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bxm01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $xdst+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L101$pb
+; LINUX-32-PIC-NEXT:  .L101$pb:
+; LINUX-32-PIC-NEXT:    popl %ecx
+; LINUX-32-PIC-NEXT:  .Ltmp101:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp101-.L101$pb), %ecx
+; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl xdst at GOT(%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bxm01:
@@ -7746,8 +8373,14 @@ define i8* @bam02() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
+; LINUX-32-PIC-NEXT:    calll .L102$pb
+; LINUX-32-PIC-NEXT:  .L102$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp102:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp102-.L102$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %ecx
 ; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
-; LINUX-32-PIC-NEXT:    addl ptr, %eax
+; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam02:
@@ -7821,7 +8454,13 @@ define i8* @bam03() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dsrc+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L103$pb
+; LINUX-32-PIC-NEXT:  .L103$pb:
+; LINUX-32-PIC-NEXT:    popl %ecx
+; LINUX-32-PIC-NEXT:  .Ltmp103:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp103-.L103$pb), %ecx
+; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl dsrc at GOT(%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam03:
@@ -7880,7 +8519,13 @@ define i8* @bam04() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ddst+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L104$pb
+; LINUX-32-PIC-NEXT:  .L104$pb:
+; LINUX-32-PIC-NEXT:    popl %ecx
+; LINUX-32-PIC-NEXT:  .Ltmp104:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp104-.L104$pb), %ecx
+; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
+; LINUX-32-PIC-NEXT:    addl ddst at GOT(%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam04:
@@ -7941,8 +8586,14 @@ define i8* @bam05() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
+; LINUX-32-PIC-NEXT:    calll .L105$pb
+; LINUX-32-PIC-NEXT:  .L105$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp105:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp105-.L105$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %ecx
 ; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
-; LINUX-32-PIC-NEXT:    addl dptr, %eax
+; LINUX-32-PIC-NEXT:    addl (%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam05:
@@ -8011,7 +8662,12 @@ define i8* @bam06() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $lsrc+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L106$pb
+; LINUX-32-PIC-NEXT:  .L106$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp106:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp106-.L106$pb), %eax
+; LINUX-32-PIC-NEXT:    leal lsrc at GOTOFF+262144(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam06:
@@ -8069,7 +8725,12 @@ define i8* @bam07() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $ldst+262144, %eax
+; LINUX-32-PIC-NEXT:    calll .L107$pb
+; LINUX-32-PIC-NEXT:  .L107$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp107:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp107-.L107$pb), %eax
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+262144(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam07:
@@ -8129,8 +8790,13 @@ define i8* @bam08() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: bam08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
+; LINUX-32-PIC-NEXT:    calll .L108$pb
+; LINUX-32-PIC-NEXT:  .L108$pb:
+; LINUX-32-PIC-NEXT:    popl %ecx
+; LINUX-32-PIC-NEXT:  .Ltmp108:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp108-.L108$pb), %ecx
 ; LINUX-32-PIC-NEXT:    movl $262144, %eax # imm = 0x40000
-; LINUX-32-PIC-NEXT:    addl lptr, %eax
+; LINUX-32-PIC-NEXT:    addl lptr at GOTOFF(%ecx), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: bam08:
@@ -8199,8 +8865,14 @@ define i8* @cat00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal src+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L109$pb
+; LINUX-32-PIC-NEXT:  .L109$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp109:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp109-.L109$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat00:
@@ -8271,8 +8943,14 @@ define i8* @cxt00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cxt00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal xsrc+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L110$pb
+; LINUX-32-PIC-NEXT:  .L110$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp110:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp110-.L110$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cxt00:
@@ -8343,8 +9021,14 @@ define i8* @cat01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dst+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L111$pb
+; LINUX-32-PIC-NEXT:  .L111$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp111:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp111-.L111$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat01:
@@ -8415,8 +9099,14 @@ define i8* @cxt01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cxt01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal xdst+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L112$pb
+; LINUX-32-PIC-NEXT:  .L112$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp112:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp112-.L112$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cxt01:
@@ -8489,9 +9179,15 @@ define i8* @cat02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    leal 64(%ecx,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L113$pb
+; LINUX-32-PIC-NEXT:  .L113$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp113:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp113-.L113$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat02:
@@ -8570,8 +9266,14 @@ define i8* @cat03(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dsrc+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L114$pb
+; LINUX-32-PIC-NEXT:  .L114$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp114:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp114-.L114$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat03:
@@ -8640,8 +9342,14 @@ define i8* @cat04(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ddst+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L115$pb
+; LINUX-32-PIC-NEXT:  .L115$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp115:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp115-.L115$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat04:
@@ -8712,9 +9420,15 @@ define i8* @cat05(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dptr, %ecx
-; LINUX-32-PIC-NEXT:    leal 64(%ecx,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L116$pb
+; LINUX-32-PIC-NEXT:  .L116$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp116:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp116-.L116$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat05:
@@ -8788,8 +9502,13 @@ define i8* @cat06(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal lsrc+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L117$pb
+; LINUX-32-PIC-NEXT:  .L117$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp117:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp117-.L117$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal lsrc at GOTOFF+64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat06:
@@ -8858,8 +9577,13 @@ define i8* @cat07(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ldst+64(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L118$pb
+; LINUX-32-PIC-NEXT:  .L118$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp118:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp118-.L118$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat07:
@@ -8930,9 +9654,14 @@ define i8* @cat08(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cat08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lptr, %ecx
-; LINUX-32-PIC-NEXT:    leal 64(%ecx,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L119$pb
+; LINUX-32-PIC-NEXT:  .L119$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp119:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp119-.L119$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 64(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cat08:
@@ -9005,8 +9734,14 @@ define i8* @cam00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal src+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L120$pb
+; LINUX-32-PIC-NEXT:  .L120$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp120:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp120-.L120$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl src at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam00:
@@ -9077,8 +9812,14 @@ define i8* @cxm00(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cxm00:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal xsrc+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L121$pb
+; LINUX-32-PIC-NEXT:  .L121$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp121:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp121-.L121$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xsrc at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cxm00:
@@ -9149,8 +9890,14 @@ define i8* @cam01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dst+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L122$pb
+; LINUX-32-PIC-NEXT:  .L122$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp122:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp122-.L122$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam01:
@@ -9221,8 +9968,14 @@ define i8* @cxm01(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cxm01:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal xdst+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L123$pb
+; LINUX-32-PIC-NEXT:  .L123$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp123:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp123-.L123$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl xdst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cxm01:
@@ -9295,9 +10048,15 @@ define i8* @cam02(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam02:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl ptr, %ecx
-; LINUX-32-PIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L124$pb
+; LINUX-32-PIC-NEXT:  .L124$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp124:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp124-.L124$pb), %eax
+; LINUX-32-PIC-NEXT:    movl ptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam02:
@@ -9376,8 +10135,14 @@ define i8* @cam03(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam03:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal dsrc+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L125$pb
+; LINUX-32-PIC-NEXT:  .L125$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp125:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp125-.L125$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl dsrc at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam03:
@@ -9446,8 +10211,14 @@ define i8* @cam04(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam04:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ddst+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L126$pb
+; LINUX-32-PIC-NEXT:  .L126$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp126:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp126-.L126$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl ddst at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam04:
@@ -9518,9 +10289,15 @@ define i8* @cam05(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam05:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl dptr, %ecx
-; LINUX-32-PIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L127$pb
+; LINUX-32-PIC-NEXT:  .L127$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp127:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp127-.L127$pb), %eax
+; LINUX-32-PIC-NEXT:    movl dptr at GOT(%eax), %eax
+; LINUX-32-PIC-NEXT:    movl (%eax), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam05:
@@ -9594,8 +10371,13 @@ define i8* @cam06(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam06:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal lsrc+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L128$pb
+; LINUX-32-PIC-NEXT:  .L128$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp128:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp128-.L128$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal lsrc at GOTOFF+262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam06:
@@ -9664,8 +10446,13 @@ define i8* @cam07(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam07:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    leal ldst+262144(,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L129$pb
+; LINUX-32-PIC-NEXT:  .L129$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp129:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp129-.L129$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    leal ldst at GOTOFF+262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam07:
@@ -9736,9 +10523,14 @@ define i8* @cam08(i64 %i) nounwind {
 ;
 ; LINUX-32-PIC-LABEL: cam08:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; LINUX-32-PIC-NEXT:    movl lptr, %ecx
-; LINUX-32-PIC-NEXT:    leal 262144(%ecx,%eax,4), %eax
+; LINUX-32-PIC-NEXT:    calll .L130$pb
+; LINUX-32-PIC-NEXT:  .L130$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp130:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp130-.L130$pb), %eax
+; LINUX-32-PIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
+; LINUX-32-PIC-NEXT:    movl lptr at GOTOFF(%eax), %eax
+; LINUX-32-PIC-NEXT:    leal 262144(%eax,%ecx,4), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: cam08:
@@ -9826,15 +10618,22 @@ define void @lcallee() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: lcallee:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    calll x
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L131$pb
+; LINUX-32-PIC-NEXT:  .L131$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp131:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp131-.L131$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    calll x at PLT
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: lcallee:
@@ -9970,15 +10769,22 @@ define internal void @dcallee() nounwind
 ;
 ; LINUX-32-PIC-LABEL: dcallee:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    calll y
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L132$pb
+; LINUX-32-PIC-NEXT:  .L132$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp132:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp132-.L132$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    calll y at PLT
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: dcallee:
@@ -10098,7 +10904,12 @@ define void ()* @address() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: address:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $callee, %eax
+; LINUX-32-PIC-NEXT:    calll .L133$pb
+; LINUX-32-PIC-NEXT:  .L133$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp133:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp133-.L133$pb), %eax
+; LINUX-32-PIC-NEXT:    movl callee at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: address:
@@ -10158,7 +10969,12 @@ define void ()* @laddress() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: laddress:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $lcallee, %eax
+; LINUX-32-PIC-NEXT:    calll .L134$pb
+; LINUX-32-PIC-NEXT:  .L134$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp134:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp134-.L134$pb), %eax
+; LINUX-32-PIC-NEXT:    movl lcallee at GOT(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: laddress:
@@ -10216,7 +11032,12 @@ define void ()* @daddress() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: daddress:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    movl $dcallee, %eax
+; LINUX-32-PIC-NEXT:    calll .L135$pb
+; LINUX-32-PIC-NEXT:  .L135$pb:
+; LINUX-32-PIC-NEXT:    popl %eax
+; LINUX-32-PIC-NEXT:  .Ltmp135:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp135-.L135$pb), %eax
+; LINUX-32-PIC-NEXT:    leal dcallee at GOTOFF(%eax), %eax
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: daddress:
@@ -10280,10 +11101,17 @@ define void @caller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: caller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll callee
-; LINUX-32-PIC-NEXT:    calll callee
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L136$pb
+; LINUX-32-PIC-NEXT:  .L136$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp136:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp136-.L136$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll callee at PLT
+; LINUX-32-PIC-NEXT:    calll callee at PLT
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: caller:
@@ -10367,10 +11195,17 @@ define void @dcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: dcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L137$pb
+; LINUX-32-PIC-NEXT:  .L137$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp137:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp137-.L137$pb), %ebx
 ; LINUX-32-PIC-NEXT:    calll dcallee
 ; LINUX-32-PIC-NEXT:    calll dcallee
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: dcaller:
@@ -10454,10 +11289,17 @@ define void @lcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: lcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll lcallee
-; LINUX-32-PIC-NEXT:    calll lcallee
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L138$pb
+; LINUX-32-PIC-NEXT:  .L138$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp138:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp138-.L138$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll lcallee at PLT
+; LINUX-32-PIC-NEXT:    calll lcallee at PLT
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: lcaller:
@@ -10539,9 +11381,16 @@ define void @tailcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: tailcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll callee
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L139$pb
+; LINUX-32-PIC-NEXT:  .L139$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp139:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp139-.L139$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll callee at PLT
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: tailcaller:
@@ -10615,9 +11464,16 @@ define void @dtailcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: dtailcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L140$pb
+; LINUX-32-PIC-NEXT:  .L140$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp140:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp140-.L140$pb), %ebx
 ; LINUX-32-PIC-NEXT:    calll dcallee
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: dtailcaller:
@@ -10691,9 +11547,16 @@ define void @ltailcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ltailcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll lcallee
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L141$pb
+; LINUX-32-PIC-NEXT:  .L141$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp141:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp141-.L141$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll lcallee at PLT
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ltailcaller:
@@ -10769,10 +11632,20 @@ define void @icaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: icaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll *ifunc
-; LINUX-32-PIC-NEXT:    calll *ifunc
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    pushl %esi
+; LINUX-32-PIC-NEXT:    pushl %eax
+; LINUX-32-PIC-NEXT:    calll .L142$pb
+; LINUX-32-PIC-NEXT:  .L142$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp142:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp142-.L142$pb), %ebx
+; LINUX-32-PIC-NEXT:    movl ifunc at GOT(%ebx), %esi
+; LINUX-32-PIC-NEXT:    calll *(%esi)
+; LINUX-32-PIC-NEXT:    calll *(%esi)
+; LINUX-32-PIC-NEXT:    addl $4, %esp
+; LINUX-32-PIC-NEXT:    popl %esi
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: icaller:
@@ -10871,10 +11744,20 @@ define void @dicaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: dicaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll *difunc
-; LINUX-32-PIC-NEXT:    calll *difunc
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    pushl %esi
+; LINUX-32-PIC-NEXT:    pushl %eax
+; LINUX-32-PIC-NEXT:    calll .L143$pb
+; LINUX-32-PIC-NEXT:  .L143$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp143:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp143-.L143$pb), %ebx
+; LINUX-32-PIC-NEXT:    movl difunc at GOT(%ebx), %esi
+; LINUX-32-PIC-NEXT:    calll *(%esi)
+; LINUX-32-PIC-NEXT:    calll *(%esi)
+; LINUX-32-PIC-NEXT:    addl $4, %esp
+; LINUX-32-PIC-NEXT:    popl %esi
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: dicaller:
@@ -10966,10 +11849,17 @@ define void @licaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: licaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll *lifunc
-; LINUX-32-PIC-NEXT:    calll *lifunc
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L144$pb
+; LINUX-32-PIC-NEXT:  .L144$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp144:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp144-.L144$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll *lifunc at GOTOFF(%ebx)
+; LINUX-32-PIC-NEXT:    calll *lifunc at GOTOFF(%ebx)
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: licaller:
@@ -11060,10 +11950,20 @@ define void @itailcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: itailcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll *ifunc
-; LINUX-32-PIC-NEXT:    calll *ifunc
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    pushl %esi
+; LINUX-32-PIC-NEXT:    pushl %eax
+; LINUX-32-PIC-NEXT:    calll .L145$pb
+; LINUX-32-PIC-NEXT:  .L145$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp145:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp145-.L145$pb), %ebx
+; LINUX-32-PIC-NEXT:    movl ifunc at GOT(%ebx), %esi
+; LINUX-32-PIC-NEXT:    calll *(%esi)
+; LINUX-32-PIC-NEXT:    calll *(%esi)
+; LINUX-32-PIC-NEXT:    addl $4, %esp
+; LINUX-32-PIC-NEXT:    popl %esi
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: itailcaller:
@@ -11160,9 +12060,17 @@ define void @ditailcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: ditailcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll *difunc
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L146$pb
+; LINUX-32-PIC-NEXT:  .L146$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp146:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp146-.L146$pb), %ebx
+; LINUX-32-PIC-NEXT:    movl difunc at GOT(%ebx), %eax
+; LINUX-32-PIC-NEXT:    calll *(%eax)
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: ditailcaller:
@@ -11241,9 +12149,16 @@ define void @litailcaller() nounwind {
 ;
 ; LINUX-32-PIC-LABEL: litailcaller:
 ; LINUX-32-PIC:       # %bb.0: # %entry
-; LINUX-32-PIC-NEXT:    subl $12, %esp
-; LINUX-32-PIC-NEXT:    calll *lifunc
-; LINUX-32-PIC-NEXT:    addl $12, %esp
+; LINUX-32-PIC-NEXT:    pushl %ebx
+; LINUX-32-PIC-NEXT:    subl $8, %esp
+; LINUX-32-PIC-NEXT:    calll .L147$pb
+; LINUX-32-PIC-NEXT:  .L147$pb:
+; LINUX-32-PIC-NEXT:    popl %ebx
+; LINUX-32-PIC-NEXT:  .Ltmp147:
+; LINUX-32-PIC-NEXT:    addl $_GLOBAL_OFFSET_TABLE_+(.Ltmp147-.L147$pb), %ebx
+; LINUX-32-PIC-NEXT:    calll *lifunc at GOTOFF(%ebx)
+; LINUX-32-PIC-NEXT:    addl $8, %esp
+; LINUX-32-PIC-NEXT:    popl %ebx
 ; LINUX-32-PIC-NEXT:    retl
 ;
 ; LINUX-64-PIC-LABEL: litailcaller:




More information about the llvm-commits mailing list