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