Home | History | Annotate | Download | only in X86
      1 ; RUN: llc < %s -march=x86 -mtriple=i686-unknown-linux-gnu -relocation-model=pic    | FileCheck %s -check-prefix=CHECK-PIC-32
      2 ; RUN: llc < %s -march=x86 -mtriple=i686-unknown-linux-gnu -relocation-model=static | FileCheck %s -check-prefix=CHECK-STATIC-32
      3 ; RUN: llc < %s -march=x86-64 -relocation-model=static | FileCheck %s -check-prefix=CHECK-STATIC-64
      4 ; RUN: llc < %s -march=x86-64 -relocation-model=pic    | FileCheck %s -check-prefix=CHECK-PIC-64
      5 ; PR3379
      6 ; XFAIL: *
      7 
      8 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
      9 target triple = "x86_64-unknown-linux-gnu"
     10 @G = external global i32              ; <i32*> [#uses=1]
     11 
     12 declare void @bar(...)
     13 
     14 ; extern int G;
     15 ; void test1() {
     16 ;  asm("frob %0 x" : : "m"(G));
     17 ;  asm("frob %P0 x" : : "m"(G));
     18 ;}
     19 
     20 define void @test1() nounwind {
     21 entry:
     22 ; P suffix removes (rip) in -static 64-bit mode.
     23 
     24 ; CHECK-PIC-64-LABEL: test1:
     25 ; CHECK-PIC-64: movq	G@GOTPCREL(%rip), %rax
     26 ; CHECK-PIC-64: frob (%rax) x
     27 ; CHECK-PIC-64: frob (%rax) x
     28 
     29 ; CHECK-STATIC-64-LABEL: test1:
     30 ; CHECK-STATIC-64: frob G(%rip) x
     31 ; CHECK-STATIC-64: frob G x
     32 
     33 ; CHECK-PIC-32-LABEL: test1:
     34 ; CHECK-PIC-32: frob G x
     35 ; CHECK-PIC-32: frob G x
     36 
     37 ; CHECK-STATIC-32-LABEL: test1:
     38 ; CHECK-STATIC-32: frob G x
     39 ; CHECK-STATIC-32: frob G x
     40 
     41         call void asm "frob $0 x", "*m"(i32* @G) nounwind
     42         call void asm "frob ${0:P} x", "*m"(i32* @G) nounwind
     43         ret void
     44 }
     45 
     46 define void @test3() nounwind {
     47 entry:
     48 ; CHECK-STATIC-64-LABEL: test3:
     49 ; CHECK-STATIC-64: call bar
     50 ; CHECK-STATIC-64: call test3
     51 ; CHECK-STATIC-64: call $bar
     52 ; CHECK-STATIC-64: call $test3
     53 
     54 ; CHECK-STATIC-32-LABEL: test3:
     55 ; CHECK-STATIC-32: call bar
     56 ; CHECK-STATIC-32: call test3
     57 ; CHECK-STATIC-32: call $bar
     58 ; CHECK-STATIC-32: call $test3
     59 
     60 ; CHECK-PIC-64-LABEL: test3:
     61 ; CHECK-PIC-64: call bar@PLT
     62 ; CHECK-PIC-64: call test3@PLT
     63 ; CHECK-PIC-64: call $bar
     64 ; CHECK-PIC-64: call $test3
     65 
     66 ; CHECK-PIC-32-LABEL: test3:
     67 ; CHECK-PIC-32: call bar@PLT
     68 ; CHECK-PIC-32: call test3@PLT
     69 ; CHECK-PIC-32: call $bar
     70 ; CHECK-PIC-32: call $test3
     71 
     72 
     73 ; asm(" blah %P0" : : "X"(bar));
     74   tail call void asm sideeffect "call ${0:P}", "X"(void (...)* @bar) nounwind
     75   tail call void asm sideeffect "call ${0:P}", "X"(void (...)* bitcast (void ()* @test3 to void (...)*)) nounwind
     76   tail call void asm sideeffect "call $0", "X"(void (...)* @bar) nounwind
     77   tail call void asm sideeffect "call $0", "X"(void (...)* bitcast (void ()* @test3 to void (...)*)) nounwind
     78   ret void
     79 }
     80