Skip to content

Commit 72d23f9

Browse files
committed
fix systemz hasandnot
1 parent 1ad3279 commit 72d23f9

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

llvm/lib/Target/SystemZ/SystemZISelLowering.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,8 +1297,17 @@ bool SystemZTargetLowering::allowsMisalignedMemoryAccesses(
12971297
}
12981298

12991299
bool SystemZTargetLowering::hasAndNot(SDValue Y) const {
1300-
// requires VNC instruction
1301-
return Subtarget.hasVector() && Y.getValueType().getScalarSizeInBits() <= 128;
1300+
EVT VT = Y.getValueType();
1301+
1302+
// We can use NC(G)RK for types in GPRs ...
1303+
if (VT == MVT::i32 || VT == MVT::i64)
1304+
return Subtarget.hasMiscellaneousExtensions3();
1305+
1306+
// ... or VNC for types in VRs.
1307+
if (VT.isVector() || VT == MVT::i128)
1308+
return Subtarget.hasVector();
1309+
1310+
return false;
13021311
}
13031312

13041313
// Information about the addressing mode for a memory access.

llvm/test/CodeGen/SystemZ/fold-masked-merge.ll

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@
88
define i32 @masked_merge0(i32 %a0, i32 %a1, i32 %a2) {
99
; NO-MISC3-LABEL: masked_merge0:
1010
; NO-MISC3: # %bb.0:
11-
; NO-MISC3-NEXT: nr %r3, %r2
12-
; NO-MISC3-NEXT: xilf %r2, 4294967295
13-
; NO-MISC3-NEXT: nr %r2, %r4
14-
; NO-MISC3-NEXT: or %r2, %r3
11+
; NO-MISC3-NEXT: xr %r3, %r4
12+
; NO-MISC3-NEXT: nr %r2, %r3
13+
; NO-MISC3-NEXT: xr %r2, %r4
1514
; NO-MISC3-NEXT: br %r14
1615
;
1716
; MISC3-LABEL: masked_merge0:
@@ -30,17 +29,16 @@ define i32 @masked_merge0(i32 %a0, i32 %a1, i32 %a2) {
3029
define i16 @masked_merge1(i16 %a0, i16 %a1, i16 %a2) {
3130
; NO-MISC3-LABEL: masked_merge1:
3231
; NO-MISC3: # %bb.0:
33-
; NO-MISC3-NEXT: nr %r3, %r2
34-
; NO-MISC3-NEXT: xilf %r2, 4294967295
35-
; NO-MISC3-NEXT: nr %r2, %r4
36-
; NO-MISC3-NEXT: or %r2, %r3
32+
; NO-MISC3-NEXT: xr %r3, %r4
33+
; NO-MISC3-NEXT: nr %r2, %r3
34+
; NO-MISC3-NEXT: xr %r2, %r4
3735
; NO-MISC3-NEXT: br %r14
3836
;
3937
; MISC3-LABEL: masked_merge1:
4038
; MISC3: # %bb.0:
41-
; MISC3-NEXT: nr %r3, %r2
42-
; MISC3-NEXT: ncrk %r2, %r4, %r2
43-
; MISC3-NEXT: or %r2, %r3
39+
; MISC3-NEXT: ncrk %r0, %r4, %r2
40+
; MISC3-NEXT: nr %r2, %r3
41+
; MISC3-NEXT: or %r2, %r0
4442
; MISC3-NEXT: br %r14
4543
%and0 = and i16 %a0, %a1
4644
%not = xor i16 %a0, -1
@@ -52,17 +50,12 @@ define i16 @masked_merge1(i16 %a0, i16 %a1, i16 %a2) {
5250
define i8 @masked_merge2(i8 %a0, i8 %a1, i8 %a2) {
5351
; NO-MISC3-LABEL: masked_merge2:
5452
; NO-MISC3: # %bb.0:
55-
; NO-MISC3-NEXT: nrk %r0, %r3, %r2
56-
; NO-MISC3-NEXT: xilf %r2, 4294967295
57-
; NO-MISC3-NEXT: nr %r2, %r3
58-
; NO-MISC3-NEXT: or %r2, %r0
53+
; NO-MISC3-NEXT: lr %r2, %r3
5954
; NO-MISC3-NEXT: br %r14
6055
;
6156
; MISC3-LABEL: masked_merge2:
6257
; MISC3: # %bb.0:
63-
; MISC3-NEXT: ncrk %r0, %r3, %r2
64-
; MISC3-NEXT: nr %r2, %r3
65-
; MISC3-NEXT: or %r2, %r0
58+
; MISC3-NEXT: lr %r2, %r3
6659
; MISC3-NEXT: br %r14
6760
%not = xor i8 %a0, -1
6861
%and0 = and i8 %not, %a1
@@ -76,12 +69,10 @@ define i64 @masked_merge3(i64 %a0, i64 %a1, i64 %a2) {
7669
; NO-MISC3: # %bb.0:
7770
; NO-MISC3-NEXT: lcgr %r0, %r4
7871
; NO-MISC3-NEXT: aghi %r0, -1
79-
; NO-MISC3-NEXT: lgr %r1, %r0
80-
; NO-MISC3-NEXT: ngr %r1, %r2
72+
; NO-MISC3-NEXT: xgr %r3, %r0
8173
; NO-MISC3-NEXT: ngr %r3, %r2
82-
; NO-MISC3-NEXT: xgr %r1, %r0
8374
; NO-MISC3-NEXT: xgr %r3, %r2
84-
; NO-MISC3-NEXT: ogrk %r2, %r1, %r3
75+
; NO-MISC3-NEXT: xgrk %r2, %r3, %r0
8576
; NO-MISC3-NEXT: br %r14
8677
;
8778
; MISC3-LABEL: masked_merge3:

0 commit comments

Comments
 (0)