1b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s
29f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner
39f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// PR10415
49f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner__asm__ ("foo1");
59f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner__asm__ ("foo2");
69f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner__asm__ ("foo3");
79f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// CHECK: module asm "foo1"
89f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// CHECK-NEXT: module asm "foo2"
99f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner// CHECK-NEXT: module asm "foo3"
109f5bff086cad25c15b4deb8a7763786097aadccdChris Lattner
1110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t1(int len) {
129f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson  __asm__ volatile("" : "=&r"(len), "+&r"(len));
132763b3af0a527c3a63cb058b90c22db0b7bcf558Anders Carlsson}
149f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
1510ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t2(unsigned long long t)  {
169f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson  __asm__ volatile("" : "+m"(t));
179f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson}
189f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
1910ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t3(unsigned char *src, unsigned long long temp) {
209f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson  __asm__ volatile("" : "+m"(temp), "+r"(src));
219f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson}
229f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
2310ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t4() {
24ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson  unsigned long long a;
25ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson  struct reg { unsigned long long a, b; } b;
26ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson
271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  __asm__ volatile ("":: "m"(a), "m"(b));
28ebaae2a3103b443d50444d335ab5ab0ff7680da2Anders Carlsson}
299f2505b934745b18d580ade4dac7b8b16952a30cAnders Carlsson
3003eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson// PR3417
3110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t5(int i) {
3203eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson  asm("nop" : "=r"(i) : "0"(t5));
3303eb543cf7ebee463b33b5802b83ac92c21770cfAnders Carlsson}
346032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson
356032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson// PR3641
3610ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t6(void) {
376032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson  __asm__ volatile("" : : "i" (t6));
386032979a5d091e5607c7c467400449727d9beb5aAnders Carlsson}
3910ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner
4010ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattnervoid t7(int a) {
4110ca96ae9aed6906c3302403ef1a146a8d4c6b74Chris Lattner  __asm__ volatile("T7 NAMED: %[input]" : "+r"(a): [input] "i" (4));
4229a4071fc450ee17449ad73266012c1b1b975511Chris Lattner  // CHECK: @t7(i32
4329a4071fc450ee17449ad73266012c1b1b975511Chris Lattner  // CHECK: T7 NAMED: $1
4402af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner}
4502af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner
4602af974dca0f855dc36d8a8c26bb87f373310815Chris Lattnervoid t8() {
4702af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner  __asm__ volatile("T8 NAMED MODIFIER: %c[input]" :: [input] "i" (4));
4829a4071fc450ee17449ad73266012c1b1b975511Chris Lattner  // CHECK: @t8()
4929a4071fc450ee17449ad73266012c1b1b975511Chris Lattner  // CHECK: T8 NAMED MODIFIER: ${0:c}
5002af974dca0f855dc36d8a8c26bb87f373310815Chris Lattner}
5188beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner
5288beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner// PR3682
5388beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattnerunsigned t9(unsigned int a) {
5488beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner  asm("bswap %0 %1" : "+r" (a));
5588beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner  return a;
5688beebe6ecab1810c3f62f0b5f8be796855861ccChris Lattner}
57ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson
58ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson// PR3908
59ec91dab1977154f13621cfb63184364afee84ea1Anders Carlssonvoid t10(int r) {
60ec91dab1977154f13621cfb63184364afee84ea1Anders Carlsson  __asm__("PR3908 %[lf] %[xx] %[li] %[r]" : [r] "+r" (r) : [lf] "mx" (0), [li] "mr" (0), [xx] "x" ((double)(0)));
6178b929121f44f7c983fce8c871aa913dce087561Eric Christopher
6229a4071fc450ee17449ad73266012c1b1b975511Chris Lattner// CHECK: @t10(
6329a4071fc450ee17449ad73266012c1b1b975511Chris Lattner// CHECK:PR3908 $1 $3 $2 $0
6478b929121f44f7c983fce8c871aa913dce087561Eric Christopher}
654df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner
664df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner// PR3373
674df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattnerunsigned t11(signed char input) {
684df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner  unsigned  output;
694df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner  __asm__("xyz"
704df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner          : "=a" (output)
714df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner          : "0" (input));
724df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner  return output;
734df4ee0ff6f804e9d3dd478712e3b5b20cd3bf2fChris Lattner}
74ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
75a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner// PR3373
76a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattnerunsigned char t12(unsigned input) {
77a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner  unsigned char output;
78a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner  __asm__("xyz"
79a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner          : "=a" (output)
80a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner          : "0" (input));
81a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner  return output;
82a077b5c8631596f8d7a588933a9de5d08e9ba428Chris Lattner}
83ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
843351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattnerunsigned char t13(unsigned input) {
853351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner  unsigned char output;
863351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner  __asm__("xyz %1"
873351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner          : "=a" (output)
883351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner          : "0" (input));
893351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner  return output;
903351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner}
913351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner
920bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattnerstruct large {
930bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner  int x[1000];
940bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner};
950bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner
960bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattnerunsigned long t15(int x, struct large *P) {
970bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner  __asm__("xyz "
980bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner          : "=r" (x)
990bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner          : "m" (*P), "0" (x));
1000bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner  return x;
1010bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner}
1020bdaa5b576237195a260d347f2646cf42ec7d745Chris Lattner
1033351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner// bitfield destination of an asm.
104ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattnerstruct S {
105ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner  int a : 4;
106ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner};
107ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner
1083351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattnervoid t14(struct S *P) {
109ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner  __asm__("abc %0" : "=r"(P->a) );
110ede9d900809c4fd0298d52f5a63088ecb8302275Chris Lattner}
1113351f1145aa91ddd8022fcd3ca16c219db9e8277Chris Lattner
1124053983963cb94a6129da47bca8cce637c8b7bffChris Lattner// PR4938
1134053983963cb94a6129da47bca8cce637c8b7bffChris Lattnerint t16() {
1144053983963cb94a6129da47bca8cce637c8b7bffChris Lattner  int a,b;
1154053983963cb94a6129da47bca8cce637c8b7bffChris Lattner  asm ( "nop;"
1164053983963cb94a6129da47bca8cce637c8b7bffChris Lattner       :"=%c" (a)
1174053983963cb94a6129da47bca8cce637c8b7bffChris Lattner       : "r" (b)
1184053983963cb94a6129da47bca8cce637c8b7bffChris Lattner       );
1194053983963cb94a6129da47bca8cce637c8b7bffChris Lattner  return 0;
1204053983963cb94a6129da47bca8cce637c8b7bffChris Lattner}
121b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner
122b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// PR6475
123b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattnervoid t17() {
124b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner  int i;
125b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner  __asm__ ( "nop": "=m"(i));
12678b929121f44f7c983fce8c871aa913dce087561Eric Christopher
127b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// CHECK: @t17()
128b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner// CHECK: call void asm "nop", "=*m,
129b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner}
130b992259f7790d3fb9fc5c2eb7182d7af9d64f9acChris Lattner
131eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// <rdar://problem/6841383>
132eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattnerint t18(unsigned data) {
133eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner  int a, b;
13478b929121f44f7c983fce8c871aa913dce087561Eric Christopher
135eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner  asm("xyz" :"=a"(a), "=d"(b) : "a"(data));
136eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner  return a + b;
137eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK: t18(i32
138eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK: = call {{.*}}asm "xyz"
139eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK-NEXT: extractvalue
140eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner// CHECK-NEXT: extractvalue
141eeeb49a69a35aba5b09021ffb4550a840af54053Chris Lattner}
142018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner
143018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner// PR6780
144018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattnerint t19(unsigned data) {
145018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner  int a, b;
14678b929121f44f7c983fce8c871aa913dce087561Eric Christopher
147018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner  asm("x{abc|def|ghi}z" :"=r"(a): "r"(data));
148018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner  return a + b;
149018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner  // CHECK: t19(i32
150018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner  // CHECK: = call {{.*}}asm "x$(abc$|def$|ghi$)z"
151018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner}
152018b54e5c3d31dc03e2a874d58ae258651087296Chris Lattner
153aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner// PR6845 - Mismatching source/dest fp types.
154aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattnerdouble t20(double x) {
155aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  register long double result;
156aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  __asm __volatile ("frndint"  : "=t" (result) : "0" (x));
157aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  return result;
15878b929121f44f7c983fce8c871aa913dce087561Eric Christopher
159aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK: @t20
160aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK: fpext double {{.*}} to x86_fp80
161aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK-NEXT: call x86_fp80 asm sideeffect "frndint"
162aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK: fptrunc x86_fp80 {{.*}} to double
163aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner}
164aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner
165aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattnerfloat t21(long double x) {
166aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  register float result;
167aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  __asm __volatile ("frndint"  : "=t" (result) : "0" (x));
168aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  return result;
169aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK: @t21
170aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK: call x86_fp80 asm sideeffect "frndint"
171aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner  // CHECK-NEXT: fptrunc x86_fp80 {{.*}} to float
172aab64d0b7f41ed30b15ba9210ed859424cbc7455Chris Lattner}
173545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen
174545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen// <rdar://problem/8348447> - accept 'l' constraint
175545be51fdfbd243b9ee98177a80397504327a687Dale Johannesenunsigned char t22(unsigned char a, unsigned char b) {
176545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned int la = a;
177545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned int lb = b;
178545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned int bigres;
179545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned char res;
180545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  __asm__ ("0:\n1:\n" : [bigres] "=la"(bigres) : [la] "0"(la), [lb] "c"(lb) :
181545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen                        "edx", "cc");
182545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  res = bigres;
183545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  return res;
184545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen}
185545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen
186545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen// <rdar://problem/8348447> - accept 'l' constraint
187545be51fdfbd243b9ee98177a80397504327a687Dale Johannesenunsigned char t23(unsigned char a, unsigned char b) {
188545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned int la = a;
189545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned int lb = b;
190545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  unsigned char res;
191545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  __asm__ ("0:\n1:\n" : [res] "=la"(res) : [la] "0"(la), [lb] "c"(lb) :
192545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen                        "edx", "cc");
193545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen  return res;
194545be51fdfbd243b9ee98177a80397504327a687Dale Johannesen}
19578b929121f44f7c983fce8c871aa913dce087561Eric Christopher
19693f1322684e928a559286ba1c7cb83af077aa658Peter Collingbournevoid *t24(char c) {
19793f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne  void *addr;
19893f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne  // CHECK: @t24
19993f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne  // CHECK: zext i8 {{.*}} to i32
20093f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne  // CHECK-NEXT: call i8* asm "foobar"
20193f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne  __asm__ ("foobar" : "=a" (addr) : "0" (c));
20293f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne  return addr;
20393f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne}
20493f1322684e928a559286ba1c7cb83af077aa658Peter Collingbourne
20578b929121f44f7c983fce8c871aa913dce087561Eric Christopher// PR10299 - fpsr, fpcr
206867a379acd42b0edef4836f44af540c7e34cc021Eric Christophervoid t25(void)
20778b929121f44f7c983fce8c871aa913dce087561Eric Christopher{
20878b929121f44f7c983fce8c871aa913dce087561Eric Christopher  __asm__ __volatile__(					   \
20978b929121f44f7c983fce8c871aa913dce087561Eric Christopher		       "finit"				   \
21078b929121f44f7c983fce8c871aa913dce087561Eric Christopher		       :				   \
21178b929121f44f7c983fce8c871aa913dce087561Eric Christopher		       :				   \
21278b929121f44f7c983fce8c871aa913dce087561Eric Christopher		       :"st","st(1)","st(2)","st(3)",	   \
21378b929121f44f7c983fce8c871aa913dce087561Eric Christopher			"st(4)","st(5)","st(6)","st(7)",   \
21478b929121f44f7c983fce8c871aa913dce087561Eric Christopher			"fpsr","fpcr"			   \
21578b929121f44f7c983fce8c871aa913dce087561Eric Christopher							   );
21678b929121f44f7c983fce8c871aa913dce087561Eric Christopher}
217c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher
218c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher// rdar://10510405 - AVX registers
219c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christophertypedef long long __m256i __attribute__((__vector_size__(32)));
220c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christophervoid t26 (__m256i *p) {
221c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher  __asm__ volatile("vmovaps  %0, %%ymm0" :: "m" (*(__m256i*)p) : "ymm0");
222c5f9a011a5c13361a3a56ed7fa3507b4b585063eEric Christopher}
22374896e074856c3248d88ddddf45bfda7256ab022Chad Rosier
22474896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// Check to make sure the inline asm non-standard dialect attribute _not_ is
22574896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// emitted.
22674896e074856c3248d88ddddf45bfda7256ab022Chad Rosiervoid t27(void) {
22774896e074856c3248d88ddddf45bfda7256ab022Chad Rosier  asm volatile("nop");
22874896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK: @t27
22974896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK: call void asm sideeffect "nop"
23074896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK-NOT: ia_nsdialect
23174896e074856c3248d88ddddf45bfda7256ab022Chad Rosier// CHECK: ret void
23274896e074856c3248d88ddddf45bfda7256ab022Chad Rosier}
233e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand
234e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand// Check handling of '*' and '#' constraint modifiers.
235e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigandvoid t28(void)
236e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand{
237e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand  asm volatile ("/* %0 */" : : "i#*X,*r" (1));
238e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand// CHECK: @t28
239e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand// CHECK: call void asm sideeffect "/* $0 */", "i|r,~{dirflag},~{fpsr},~{flags}"(i32 1)
240e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand}
241e6b3dbae38f62164cab3989380cd940242d80120Ulrich Weigand
242