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