brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.7 KiB · 581200b Raw
282 lines · c
1// RUN: %clang_cc1 -triple i686 %s -emit-llvm -o - | FileCheck %s2// RUN: %clang_cc1 -triple x86_64 %s -emit-llvm -o - | FileCheck %s3// RUN: %clang_cc1 -triple arm %s -emit-llvm -o - | FileCheck %s4// RUN: %clang_cc1 -triple mips %s -emit-llvm -o - | FileCheck %s5// RUN: %clang_cc1 -triple mipsel %s -emit-llvm -o - | FileCheck %s6// RUN: %clang_cc1 -triple powerpc %s -emit-llvm -o - | FileCheck %s7// RUN: %clang_cc1 -triple powerpc64 %s -emit-llvm -o - | FileCheck %s8// RUN: %clang_cc1 -triple s390x %s -emit-llvm -o - | FileCheck %s9// RUN: %clang_cc1 -triple sparc %s -emit-llvm -o - | FileCheck %s10// RUN: %clang_cc1 -triple sparcv9 %s -emit-llvm -o - | FileCheck %s11// RUN: %clang_cc1 -triple thumb %s -emit-llvm -o - | FileCheck %s12 13int mout0;14int min1;15int marray[2];16 17// CHECK: @single_m18void single_m(void)19{20  // CHECK: call void asm "foo $1,$0", "=*m,*m[[CLOBBERS:[a-zA-Z0-9@%{},~_$ ]*\"]](ptr elementtype(i32) {{[a-zA-Z0-9@%]+}}, ptr elementtype(i32) {{[a-zA-Z0-9@%]+}})21  asm("foo %1,%0" : "=m" (mout0) : "m" (min1));22}23 24// CHECK: @single_o25void single_o(void)26{27  register int out0 = 0;28  register int index = 1;29  // Doesn't really do an offset...30  //asm("foo %1, %2,%0" : "=r" (out0) : "o" (min1));31}32 33// CHECK: @single_V34void single_V(void)35{36//  asm("foo %1,%0" : "=m" (mout0) : "V" (min1));37}38 39// CHECK: @single_lt40void single_lt(void)41{42  register int out0 = 0;43  register int in1 = 1;44  // CHECK: call i32 asm "foo $1,$0", "=r,<r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})45  asm("foo %1,%0" : "=r" (out0) : "<r" (in1));46  // CHECK: call i32 asm "foo $1,$0", "=r,r<[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})47  asm("foo %1,%0" : "=r" (out0) : "r<" (in1));48}49 50// CHECK: @single_gt51void single_gt(void)52{53  register int out0 = 0;54  register int in1 = 1;55  // CHECK: call i32 asm "foo $1,$0", "=r,>r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})56  asm("foo %1,%0" : "=r" (out0) : ">r" (in1));57  // CHECK: call i32 asm "foo $1,$0", "=r,r>[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})58  asm("foo %1,%0" : "=r" (out0) : "r>" (in1));59}60 61// CHECK: @single_r62void single_r(void)63{64  register int out0 = 0;65  register int in1 = 1;66  // CHECK: call i32 asm "foo $1,$0", "=r,r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})67  asm("foo %1,%0" : "=r" (out0) : "r" (in1));68}69 70// CHECK: @single_i71void single_i(void)72{73  register int out0 = 0;74  // CHECK: call i32 asm "foo $1,$0", "=r,i[[CLOBBERS]](i32 1)75  asm("foo %1,%0" : "=r" (out0) : "i" (1));76}77 78// CHECK: @single_n79void single_n(void)80{81  register int out0 = 0;82  // CHECK: call i32 asm "foo $1,$0", "=r,n[[CLOBBERS]](i32 1)83  asm("foo %1,%0" : "=r" (out0) : "n" (1));84}85 86// CHECK: @single_E87void single_E(void)88{89  register double out0 = 0.0;90  // CHECK: call double asm "foo $1,$0", "=r,E[[CLOBBERS]](double {{[0-9.eE+-]+}})91  asm("foo %1,%0" : "=r" (out0) : "E" (1.0e+01));92}93 94// CHECK: @single_F95void single_F(void)96{97  register double out0 = 0.0;98  // CHECK: call double asm "foo $1,$0", "=r,F[[CLOBBERS]](double {{[0-9.eE+-]+}})99  asm("foo %1,%0" : "=r" (out0) : "F" (1.0));100}101 102// CHECK: @single_s103void single_s(void)104{105  register int out0 = 0;106  //asm("foo %1,%0" : "=r" (out0) : "s" (single_s));107}108 109// CHECK: @single_g110void single_g(void)111{112  register int out0 = 0;113  register int in1 = 1;114  // CHECK: call i32 asm "foo $1,$0", "=r,imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})115  asm("foo %1,%0" : "=r" (out0) : "g" (in1));116  // CHECK: call i32 asm "foo $1,$0", "=r,imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})117  asm("foo %1,%0" : "=r" (out0) : "g" (min1));118  // CHECK: call i32 asm "foo $1,$0", "=r,imr[[CLOBBERS]](i32 1)119  asm("foo %1,%0" : "=r" (out0) : "g" (1));120}121 122// CHECK: @single_X123void single_X(void)124{125  register int out0 = 0;126  register int in1 = 1;127  // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})128  asm("foo %1,%0" : "=r" (out0) : "X" (in1));129  // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})130  asm("foo %1,%0" : "=r" (out0) : "X" (min1));131  // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](i32 1)132  asm("foo %1,%0" : "=r" (out0) : "X" (1));133  // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](ptr {{[a-zA-Z0-9@%]+}})134  asm("foo %1,%0" : "=r" (out0) : "X" (marray));135  // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](double {{[0-9.eE+-]+}})136  asm("foo %1,%0" : "=r" (out0) : "X" (1.0e+01));137  // CHECK: call i32 asm "foo $1,$0", "=r,X[[CLOBBERS]](double {{[0-9.eE+-]+}})138  asm("foo %1,%0" : "=r" (out0) : "X" (1.0));139}140 141// CHECK: @single_p142void single_p(void)143{144  register int out0 = 0;145  // Constraint converted differently on different platforms moved to platform-specific.146  // : call i32 asm "foo $1,$0", "=r,im[[CLOBBERS]](ptr getelementptr inbounds ([2 x i32], ptr {{[a-zA-Z0-9@%]+}}, i{{32|64}} 0, i{{32|64}} 0))147  asm("foo %1,%0" : "=r" (out0) : "p" (marray));148}149 150// CHECK: @multi_m151void multi_m(void)152{153  // CHECK: call void asm "foo $1,$0", "=*m|r,m|r[[CLOBBERS]](ptr elementtype(i32) {{[a-zA-Z0-9@%]+}}, i32 {{[a-zA-Z0-9@%]+}})154  asm("foo %1,%0" : "=m,r" (mout0) : "m,r" (min1));155}156 157// CHECK: @multi_o158void multi_o(void)159{160  register int out0 = 0;161  register int index = 1;162  // Doesn't really do an offset...163  //asm("foo %1, %2,%0" : "=r,r" (out0) : "r,o" (min1));164}165 166// CHECK: @multi_V167void multi_V(void)168{169//  asm("foo %1,%0" : "=m,r" (mout0) : "r,V" (min1));170}171 172// CHECK: @multi_lt173void multi_lt(void)174{175  register int out0 = 0;176  register int in1 = 1;177  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|<r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})178  asm("foo %1,%0" : "=r,r" (out0) : "r,<r" (in1));179  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|r<[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})180  asm("foo %1,%0" : "=r,r" (out0) : "r,r<" (in1));181}182 183// CHECK: @multi_gt184void multi_gt(void)185{186  register int out0 = 0;187  register int in1 = 1;188  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|>r[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})189  asm("foo %1,%0" : "=r,r" (out0) : "r,>r" (in1));190  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|r>[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})191  asm("foo %1,%0" : "=r,r" (out0) : "r,r>" (in1));192}193 194// CHECK: @multi_r195void multi_r(void)196{197  register int out0 = 0;198  register int in1 = 1;199  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|m[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})200  asm("foo %1,%0" : "=r,r" (out0) : "r,m" (in1));201}202 203// CHECK: @multi_i204void multi_i(void)205{206  register int out0 = 0;207  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|i[[CLOBBERS]](i32 1)208  asm("foo %1,%0" : "=r,r" (out0) : "r,i" (1));209}210 211// CHECK: @multi_n212void multi_n(void)213{214  register int out0 = 0;215  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|n[[CLOBBERS]](i32 1)216  asm("foo %1,%0" : "=r,r" (out0) : "r,n" (1));217}218 219// CHECK: @multi_E220void multi_E(void)221{222  register double out0 = 0.0;223  // CHECK: call double asm "foo $1,$0", "=r|r,r|E[[CLOBBERS]](double {{[0-9.eE+-]+}})224  asm("foo %1,%0" : "=r,r" (out0) : "r,E" (1.0e+01));225}226 227// CHECK: @multi_F228void multi_F(void)229{230  register double out0 = 0.0;231  // CHECK: call double asm "foo $1,$0", "=r|r,r|F[[CLOBBERS]](double {{[0-9.eE+-]+}})232  asm("foo %1,%0" : "=r,r" (out0) : "r,F" (1.0));233}234 235// CHECK: @multi_s236void multi_s(void)237{238  register int out0 = 0;239  //asm("foo %1,%0" : "=r,r" (out0) : "r,s" (multi_s));240}241 242// CHECK: @multi_g243void multi_g(void)244{245  register int out0 = 0;246  register int in1 = 1;247  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})248  asm("foo %1,%0" : "=r,r" (out0) : "r,g" (in1));249  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|imr[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})250  asm("foo %1,%0" : "=r,r" (out0) : "r,g" (min1));251  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|imr[[CLOBBERS]](i32 1)252  asm("foo %1,%0" : "=r,r" (out0) : "r,g" (1));253}254 255// CHECK: @multi_X256void multi_X(void)257{258  register int out0 = 0;259  register int in1 = 1;260  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})261  asm("foo %1,%0" : "=r,r" (out0) : "r,X" (in1));262  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32 {{[a-zA-Z0-9@%]+}})263  asm("foo %1,%0" : "=r,r" (out0) : "r,X" (min1));264  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](i32 1)265  asm("foo %1,%0" : "=r,r" (out0) : "r,X" (1));266  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](ptr {{[a-zA-Z0-9@%]+}})267  asm("foo %1,%0" : "=r,r" (out0) : "r,X" (marray));268  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](double {{[0-9.eE+-]+}})269  asm("foo %1,%0" : "=r,r" (out0) : "r,X" (1.0e+01));270  // CHECK: call i32 asm "foo $1,$0", "=r|r,r|X[[CLOBBERS]](double {{[0-9.eE+-]+}})271  asm("foo %1,%0" : "=r,r" (out0) : "r,X" (1.0));272}273 274// CHECK: @multi_p275void multi_p(void)276{277  register int out0 = 0;278  // Constraint converted differently on different platforms moved to platform-specific.279  // : call i32 asm "foo $1,$0", "=r|r,r|im[[CLOBBERS]](ptr getelementptr inbounds ([2 x i32], ptr {{[a-zA-Z0-9@%]+}}, {{i[0-9]*}} 0, {{i[0-9]*}} 0))280  asm("foo %1,%0" : "=r,r" (out0) : "r,p" (marray));281}282