Skip to content

Commit 06e46d0

Browse files
tltaoTony Tao
authored andcommitted
[SystemZ] Introduce GNU and HLASM differences to asmwriter and update tests (llvm#113369)
Now that the GNU and HLASM `InstPrinter` paths are separated in llvm#112975, differentiate between them in `SystemZInstrFormats.td`. The main difference are: - Tabs converted to space - Remove space after comma for instruction operands --------- Co-authored-by: Tony Tao <[email protected]>
1 parent 7c3299b commit 06e46d0

15 files changed

+507
-496
lines changed

llvm/lib/Target/SystemZ/MCTargetDesc/SystemZHLASMInstPrinter.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ void SystemZHLASMInstPrinter::printInst(const MCInst *MI, uint64_t Address,
3030
StringRef Annot,
3131
const MCSubtargetInfo &STI,
3232
raw_ostream &O) {
33-
printInstruction(MI, Address, O);
33+
std::string Str;
34+
raw_string_ostream RSO(Str);
35+
printInstruction(MI, Address, RSO);
36+
// Eat the first tab character and replace it with a space since it is
37+
// hardcoded in AsmWriterEmitter::EmitPrintInstruction
38+
// TODO: introduce a line prefix member to AsmWriter to avoid this problem
39+
if (!Str.empty() && Str.front() == '\t')
40+
O << " " << Str.substr(1, Str.length());
41+
else
42+
O << Str;
43+
3444
printAnnotation(O, Annot);
3545
}

llvm/lib/Target/SystemZ/SystemZInstrFormats.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ class InstSystemZ<int size, dag outs, dag ins, string asmstr,
1818
dag InOperandList = ins;
1919
let Size = size;
2020
let Pattern = pattern;
21-
let AsmString = asmstr;
21+
// Convert tabs to spaces, and remove space after comma for HLASM syntax
22+
let AsmString = !subst("\t", "{\t| }", !subst(", ", "{, |,}", asmstr));
2223

2324
let hasSideEffects = 0;
2425
let mayLoad = 0;

llvm/test/CodeGen/SystemZ/call-zos-01.ll

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -3,81 +3,81 @@
33
; RUN: llc < %s -mtriple=s390x-ibm-zos -mcpu=z10 | FileCheck %s
44

55
; CHECK-LABEL: call_char:
6-
; CHECK: lghi 1, 8
6+
; CHECK: lghi 1,8
77
define i8 @call_char(){
88
%retval = call i8 (i8) @pass_char(i8 8)
99
ret i8 %retval
1010
}
1111

1212
; CHECK-LABEL: call_short:
13-
; CHECK: lghi 1, 16
13+
; CHECK: lghi 1,16
1414
define i16 @call_short() {
1515
entry:
1616
%retval = call i16 (i16) @pass_short(i16 16)
1717
ret i16 %retval
1818
}
1919

2020
; CHECK-LABEL: call_int:
21-
; CHECK: lghi 1, 32
22-
; CHECK: lghi 2, 33
21+
; CHECK: lghi 1,32
22+
; CHECK: lghi 2,33
2323
define i32 @call_int() {
2424
entry:
2525
%retval = call i32 (i32, i32) @pass_int(i32 32, i32 33)
2626
ret i32 %retval
2727
}
2828

2929
; CHECK-LABEL: call_long:
30-
; CHECK: lghi 1, 64
31-
; CHECK: lghi 2, 65
32-
; CHECK: lghi 3, 66
30+
; CHECK: lghi 1,64
31+
; CHECK: lghi 2,65
32+
; CHECK: lghi 3,66
3333
define i64 @call_long() {
3434
entry:
3535
%retval = call i64 (i64, i64, i64) @pass_long(i64 64, i64 65, i64 66)
3636
ret i64 %retval
3737
}
3838

3939
; CHECK-LABEL: call_ptr:
40-
; CHECK: lgr 1, 2
40+
; CHECK: lgr 1,2
4141
define i32 @call_ptr(ptr %p1, ptr %p2) {
4242
entry:
4343
%retval = call i32 (ptr) @pass_ptr(ptr %p2)
4444
ret i32 %retval
4545
}
4646

4747
; CHECK-LABEL: call_integrals:
48-
; CHECK: lghi 1, 64
49-
; CHECK: lghi 2, 32
50-
; CHECK: lghi 3, 16
48+
; CHECK: lghi 1,64
49+
; CHECK: lghi 2,32
50+
; CHECK: lghi 3,16
5151
define i64 @call_integrals() {
5252
entry:
5353
%retval = call i64 (i64, i32, i16, i64) @pass_integrals0(i64 64, i32 32, i16 16, i64 128)
5454
ret i64 %retval
5555
}
5656

5757
; CHECK-LABEL: pass_char:
58-
; CHECK: lgr 3, 1
58+
; CHECK: lgr 3,1
5959
define signext i8 @pass_char(i8 signext %arg) {
6060
entry:
6161
ret i8 %arg
6262
}
6363

6464
; CHECK-LABEL: pass_short:
65-
; CHECK: lgr 3, 1
65+
; CHECK: lgr 3,1
6666
define signext i16 @pass_short(i16 signext %arg) {
6767
entry:
6868
ret i16 %arg
6969
}
7070

7171
; CHECK-LABEL: pass_int:
72-
; CHECK: lgr 3, 2
72+
; CHECK: lgr 3,2
7373
define signext i32 @pass_int(i32 signext %arg0, i32 signext %arg1) {
7474
entry:
7575
ret i32 %arg1
7676
}
7777

7878
; CHECK-LABEL: pass_long:
79-
; CHECK: agr 1, 2
80-
; CHECK: agr 3, 1
79+
; CHECK: agr 1,2
80+
; CHECK: agr 3,1
8181
define signext i64 @pass_long(i64 signext %arg0, i64 signext %arg1, i64 signext %arg2) {
8282
entry:
8383
%N = add i64 %arg0, %arg1
@@ -86,8 +86,8 @@ entry:
8686
}
8787

8888
; CHECK-LABEL: pass_integrals0:
89-
; CHECK: ag 2, 2200(4)
90-
; CHECK-NEXT: lgr 3, 2
89+
; CHECK: ag 2,2200(4)
90+
; CHECK-NEXT: lgr 3,2
9191
define signext i64 @pass_integrals0(i64 signext %arg0, i32 signext %arg1, i16 signext %arg2, i64 signext %arg3) {
9292
entry:
9393
%N = sext i32 %arg1 to i64
@@ -96,88 +96,88 @@ entry:
9696
}
9797

9898
; CHECK-LABEL: call_float:
99-
; CHECK: le 0, 0({{[0-9]}})
99+
; CHECK: le 0,0({{[0-9]}})
100100
define float @call_float() {
101101
entry:
102102
%ret = call float (float) @pass_float(float 0x400921FB60000000)
103103
ret float %ret
104104
}
105105

106106
; CHECK-LABEL: call_double:
107-
; CHECK: larl [[GENREG:[0-9]+]], L#{{CPI[0-9]+_[0-9]+}}
108-
; CHECK-NEXT: ld 0, 0([[GENREG]])
107+
; CHECK: larl [[GENREG:[0-9]+]],L#{{CPI[0-9]+_[0-9]+}}
108+
; CHECK-NEXT: ld 0,0([[GENREG]])
109109
define double @call_double() {
110110
entry:
111111
%ret = call double (double) @pass_double(double 3.141000e+00)
112112
ret double %ret
113113
}
114114

115115
; CHECK-LABEL: call_longdouble:
116-
; CHECK: larl [[GENREG:[0-9]+]], L#{{CPI[0-9]+_[0-9]+}}
117-
; CHECK-NEXT: ld 0, 0([[GENREG]])
118-
; CHECK-NEXT: ld 2, 8([[GENREG]])
116+
; CHECK: larl [[GENREG:[0-9]+]],L#{{CPI[0-9]+_[0-9]+}}
117+
; CHECK-NEXT: ld 0,0([[GENREG]])
118+
; CHECK-NEXT: ld 2,8([[GENREG]])
119119
define fp128 @call_longdouble() {
120120
entry:
121121
%ret = call fp128 (fp128) @pass_longdouble(fp128 0xLE0FC1518450562CD4000921FB5444261)
122122
ret fp128 %ret
123123
}
124124

125125
; CHECK-LABEL: call_floats0
126-
; CHECK: larl [[GENREG:[0-9]+]], L#{{CPI[0-9]+_[0-9]+}}
127-
; CHECK-NEXT: ld 1, 0([[GENREG]])
128-
; CHECK-NEXT: ld 3, 8([[GENREG]])
129-
; CHECK: lxr 5, 0
130-
; CHECK: lxr 0, 1
131-
; CHECK: lxr 4, 5
126+
; CHECK: larl [[GENREG:[0-9]+]],L#{{CPI[0-9]+_[0-9]+}}
127+
; CHECK-NEXT: ld 1,0([[GENREG]])
128+
; CHECK-NEXT: ld 3,8([[GENREG]])
129+
; CHECK: lxr 5,0
130+
; CHECK: lxr 0,1
131+
; CHECK: lxr 4,5
132132
define i64 @call_floats0(fp128 %arg0, double %arg1) {
133133
entry:
134134
%ret = call i64 (fp128, fp128, double) @pass_floats0(fp128 0xLE0FC1518450562CD4000921FB5444261, fp128 %arg0, double %arg1)
135135
ret i64 %ret
136136
}
137137

138138
; CHECK-LABEL: call_floats1
139-
; CHECK: lxr 1, 0
140-
; CHECK: ldr 0, 4
141-
; CHECK: lxr 4, 1
139+
; CHECK: lxr 1,0
140+
; CHECK: ldr 0,4
141+
; CHECK: lxr 4,1
142142
define i64 @call_floats1(fp128 %arg0, double %arg1) {
143143
entry:
144144
%ret = call i64 (double, fp128) @pass_floats1(double %arg1, fp128 %arg0)
145145
ret i64 %ret
146146
}
147147

148148
; CHECK-LABEL: pass_float:
149-
; CHECK: larl 1, L#{{CPI[0-9]+_[0-9]+}}
150-
; CHECK: aeb 0, 0(1)
149+
; CHECK: larl 1,L#{{CPI[0-9]+_[0-9]+}}
150+
; CHECK: aeb 0,0(1)
151151
define float @pass_float(float %arg) {
152152
entry:
153153
%X = fadd float %arg, 0x400821FB60000000
154154
ret float %X
155155
}
156156

157157
; CHECK-LABEL: pass_double:
158-
; CHECK: larl 1, L#{{CPI[0-9]+_[0-9]+}}
159-
; CHECK: adb 0, 0(1)
158+
; CHECK: larl 1,L#{{CPI[0-9]+_[0-9]+}}
159+
; CHECK: adb 0,0(1)
160160
define double @pass_double(double %arg) {
161161
entry:
162162
%X = fadd double %arg, 1.414213e+00
163163
ret double %X
164164
}
165165

166166
; CHECK-LABEL: pass_longdouble
167-
; CHECK: larl 1, L#{{CPI[0-9]+_[0-9]+}}
168-
; CHECK: lxdb 1, 0(1)
169-
; CHECK: axbr 0, 1
167+
; CHECK: larl 1,L#{{CPI[0-9]+_[0-9]+}}
168+
; CHECK: lxdb 1,0(1)
169+
; CHECK: axbr 0,1
170170
define fp128 @pass_longdouble(fp128 %arg) {
171171
entry:
172172
%X = fadd fp128 %arg, 0xL10000000000000004000921FB53C8D4F
173173
ret fp128 %X
174174
}
175175

176176
; CHECK-LABEL: pass_floats0
177-
; CHECK: larl 1, L#{{CPI[0-9]+_[0-9]+}}
178-
; CHECK: axbr 0, 4
179-
; CHECK: axbr 1, 0
180-
; CHECK: cxbr 1, 5
177+
; CHECK: larl 1,L#{{CPI[0-9]+_[0-9]+}}
178+
; CHECK: axbr 0,4
179+
; CHECK: axbr 1,0
180+
; CHECK: cxbr 1,5
181181
define i64 @pass_floats0(fp128 %arg0, fp128 %arg1, double %arg2) {
182182
%X = fadd fp128 %arg0, %arg1
183183
%arg2_ext = fpext double %arg2 to fp128

llvm/test/CodeGen/SystemZ/call-zos-02.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ entry:
99
define hidden signext i32 @caller2() {
1010
entry:
1111
; CHECK-LABEL: caller2:
12-
; CHECK: brasl 7, caller@PLT * encoding: [0xc0,0x75,A,A,A,A]
12+
; CHECK: brasl 7,caller@PLT * encoding: [0xc0,0x75,A,A,A,A]
1313
; CHECK-NEXT: * fixup A - offset: 2, value: caller@PLT+2, kind: FK_390_PC32DBL
14-
; CHECK-NEXT: bcr 0, 3 * encoding: [0x07,0x03]
14+
; CHECK-NEXT: bcr 0,3 * encoding: [0x07,0x03]
1515
%call = call signext i32 @caller()
1616
ret i32 %call
1717
}

llvm/test/CodeGen/SystemZ/call-zos-i128.ll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
; RUN: llc < %s -mtriple=s390x-ibm-zos -mcpu=z13 | FileCheck %s
44

55
; CHECK-LABEL: call_i128:
6-
; CHECK-DAG: larl 1, L#CPI0_0
7-
; CHECK-DAG: vl 0, 0(1), 3
8-
; CHECK-DAG: vst 0, 2256(4), 3
9-
; CHECK-DAG: larl 1, L#CPI0_1
10-
; CHECK-DAG: vl 0, 0(1), 3
11-
; CHECK-DAG: vst 0, 2272(4), 3
12-
; CHECK-DAG: la 1, 2288(4)
13-
; CHECK-DAG: la 2, 2272(4)
14-
; CHECK-DAG: la 3, 2256(4)
6+
; CHECK-DAG: larl 1,L#CPI0_0
7+
; CHECK-DAG: vl 0,0(1),3
8+
; CHECK-DAG: vst 0,2256(4),3
9+
; CHECK-DAG: larl 1,L#CPI0_1
10+
; CHECK-DAG: vl 0,0(1),3
11+
; CHECK-DAG: vst 0,2272(4),3
12+
; CHECK-DAG: la 1,2288(4)
13+
; CHECK-DAG: la 2,2272(4)
14+
; CHECK-DAG: la 3,2256(4)
1515

1616
define i128 @call_i128() {
1717
entry:
@@ -20,10 +20,10 @@ entry:
2020
}
2121

2222
; CHECK-LABEL: pass_i128:
23-
; CHECK: vl 0, 0(3), 3
24-
; CHECK: vl 1, 0(2), 3
25-
; CHECK: vaq 0, 1, 0
26-
; CHECK: vst 0, 0(1), 3
23+
; CHECK: vl 0,0(3),3
24+
; CHECK: vl 1,0(2),3
25+
; CHECK: vaq 0,1,0
26+
; CHECK: vst 0,0(1),3
2727
define i128 @pass_i128(i128 %arg0, i128 %arg1) {
2828
entry:
2929
%N = add i128 %arg0, %arg1

0 commit comments

Comments
 (0)