Skip to content

Commit 64bb037

Browse files
committed
Eliminate G_TRUNC to S1 SGPR
1 parent fc1e872 commit 64bb037

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

llvm/lib/Target/AMDGPU/AMDGPURegBankLegalizeHelper.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,8 @@ void RegBankLegalizeHelper::applyMappingDst(
11321132
assert(RB == SgprRB);
11331133
Register NewDst = MRI.createVirtualRegister(SgprRB_S32);
11341134
Op.setReg(NewDst);
1135-
B.buildTrunc(Reg, NewDst);
1135+
if (!MRI.use_empty(Reg))
1136+
B.buildTrunc(Reg, NewDst);
11361137
break;
11371138
}
11381139
case InvalidMapping: {

llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-add.mir

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,3 +448,29 @@ body: |
448448
%4:_(s32), %5:_(s1) = G_UADDE %0, %1, %3
449449
S_ENDPGM 0, implicit %4
450450
...
451+
452+
---
453+
name: uadde_s32_ss_scc_use
454+
legalized: true
455+
456+
body: |
457+
bb.0:
458+
liveins: $sgpr0, $sgpr1, $sgpr2
459+
; CHECK-LABEL: name: uadde_s32_ss_scc_use
460+
; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2
461+
; CHECK-NEXT: {{ $}}
462+
; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
463+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
464+
; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
465+
; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1
466+
; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY2]], [[C]]
467+
; CHECK-NEXT: [[UADDE:%[0-9]+]]:sgpr(s32), [[UADDE1:%[0-9]+]]:sgpr(s32) = G_UADDE [[COPY]], [[COPY1]], [[AND]]
468+
; CHECK-NEXT: S_ENDPGM 0, implicit [[UADDE]](s32)
469+
%0:_(s32) = COPY $sgpr0
470+
%1:_(s32) = COPY $sgpr1
471+
%2:_(s32) = COPY $sgpr2
472+
%3:_(s1) = G_TRUNC %2
473+
%4:_(s32), %5:_(s1) = G_UADDE %0, %1, %3
474+
%6:_(s32) = G_ANYEXT %5:_(s1)
475+
S_ENDPGM 0, implicit %4
476+
...

llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-sext.mir

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,14 @@ body: |
7777
; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
7878
; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]
7979
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
80+
; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 255
81+
; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C3]]
8082
%0:_(s32) = COPY $sgpr0
8183
%1:_(s32) = COPY $sgpr1
8284
%2:_(s1) = G_ICMP intpred(eq), %0, %1
8385
%3:_(s16) = G_SEXT %2
86+
%4:_(s16) = G_CONSTANT i16 255
87+
%5:_(s16) = G_AND %3, %4
8488
...
8589

8690
---
@@ -215,9 +219,13 @@ body: |
215219
; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
216220
; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]
217221
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
222+
; CHECK-NEXT: [[C3:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 255
223+
; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C3]]
218224
%0:_(s32) = COPY $sgpr0
219225
%1:_(s1) = G_TRUNC %0
220226
%2:_(s16) = G_SEXT %1
227+
%3:_(s16) = G_CONSTANT i16 255
228+
%4:_(s16) = G_AND %2, %3
221229
...
222230

223231
---

llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-zext.mir

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,14 @@ body: |
7373
; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
7474
; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]
7575
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
76+
; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 255
77+
; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C2]]
7678
%0:_(s32) = COPY $sgpr0
7779
%1:_(s32) = COPY $sgpr1
7880
%2:_(s1) = G_ICMP intpred(eq), %0, %1
7981
%3:_(s16) = G_ZEXT %2
82+
%4:_(s16) = G_CONSTANT i16 255
83+
%5:_(s16) = G_AND %3, %4
8084
...
8185

8286
---
@@ -209,9 +213,13 @@ body: |
209213
; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
210214
; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]
211215
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
216+
; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s16) = G_CONSTANT i16 255
217+
; CHECK-NEXT: [[AND1:%[0-9]+]]:sgpr(s16) = G_AND [[TRUNC]], [[C2]]
212218
%0:_(s32) = COPY $sgpr0
213219
%1:_(s1) = G_TRUNC %0
214220
%2:_(s16) = G_ZEXT %1
221+
%3:_(s16) = G_CONSTANT i16 255
222+
%4:_(s16) = G_AND %2, %3
215223
...
216224

217225
---

0 commit comments

Comments
 (0)