Skip to content

Commit eccca2d

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

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
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: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ body: |
7676
; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -1
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]]
79-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
8079
%0:_(s32) = COPY $sgpr0
8180
%1:_(s32) = COPY $sgpr1
8281
%2:_(s1) = G_ICMP intpred(eq), %0, %1
@@ -214,7 +213,6 @@ body: |
214213
; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 -1
215214
; CHECK-NEXT: [[C2:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
216215
; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C1]], [[C2]]
217-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
218216
%0:_(s32) = COPY $sgpr0
219217
%1:_(s1) = G_TRUNC %0
220218
%2:_(s16) = G_SEXT %1

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ body: |
7272
; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[ICMP]], [[C]]
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]]
75-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
7675
%0:_(s32) = COPY $sgpr0
7776
%1:_(s32) = COPY $sgpr1
7877
%2:_(s1) = G_ICMP intpred(eq), %0, %1
@@ -208,7 +207,6 @@ body: |
208207
; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[C]]
209208
; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
210209
; CHECK-NEXT: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[AND]](s32), [[C]], [[C1]]
211-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SELECT]](s32)
212210
%0:_(s32) = COPY $sgpr0
213211
%1:_(s1) = G_TRUNC %0
214212
%2:_(s16) = G_ZEXT %1

0 commit comments

Comments
 (0)