1; Test matching operands with the GPR constraint "r".
2;
3; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5define void @f1(i32 *%dst) {
6; CHECK-LABEL: f1:
7; CHECK: lhi %r0, 100
8; CHECK: blah %r0
9; CHECK: st %r0, 0(%r2)
10; CHECK: br %r14
11  %val = call i32 asm "blah $0", "=r,0" (i8 100)
12  store i32 %val, i32 *%dst
13  ret void
14}
15
16define void @f2(i32 *%dst) {
17; CHECK-LABEL: f2:
18; CHECK: lhi %r0, 101
19; CHECK: blah %r0
20; CHECK: st %r0, 0(%r2)
21; CHECK: br %r14
22  %val = call i32 asm "blah $0", "=r,0" (i16 101)
23  store i32 %val, i32 *%dst
24  ret void
25}
26
27define void @f3(i32 *%dst) {
28; CHECK-LABEL: f3:
29; CHECK: lhi %r0, 102
30; CHECK: blah %r0
31; CHECK: st %r0, 0(%r2)
32; CHECK: br %r14
33  %val = call i32 asm "blah $0", "=r,0" (i32 102)
34  store i32 %val, i32 *%dst
35  ret void
36}
37
38; FIXME: this uses "lhi %r0, 103", but should use "lghi %r0, 103".
39define void @f4(i32 *%dst) {
40; CHECK-LABEL: f4:
41; CHECK: blah %r0
42; CHECK: st %r0, 0(%r2)
43; CHECK: br %r14
44  %val = call i32 asm "blah $0", "=r,0" (i64 103)
45  store i32 %val, i32 *%dst
46  ret void
47}
48
49define i64 @f5() {
50; CHECK-LABEL: f5:
51; CHECK: lghi %r2, 104
52; CHECK: blah %r2
53; CHECK: br %r14
54  %val = call i64 asm "blah $0", "=r,0" (i8 104)
55  ret i64 %val
56}
57
58define i64 @f6() {
59; CHECK-LABEL: f6:
60; CHECK: lghi %r2, 105
61; CHECK: blah %r2
62; CHECK: br %r14
63  %val = call i64 asm "blah $0", "=r,0" (i16 105)
64  ret i64 %val
65}
66
67define i64 @f7() {
68; CHECK-LABEL: f7:
69; CHECK: lghi %r2, 106
70; CHECK: blah %r2
71; CHECK: br %r14
72  %val = call i64 asm "blah $0", "=r,0" (i32 106)
73  ret i64 %val
74}
75
76define i64 @f8() {
77; CHECK-LABEL: f8:
78; CHECK: lghi %r2, 107
79; CHECK: blah %r2
80; CHECK: br %r14
81  %val = call i64 asm "blah $0", "=r,0" (i64 107)
82  ret i64 %val
83}
84