Skip to content

Commit d4bd712

Browse files
committed
fix tests, and disable combine for i1 cases
1 parent 4dcec18 commit d4bd712

File tree

4 files changed

+162
-14
lines changed

4 files changed

+162
-14
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelperCasts.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,17 @@ bool CombinerHelper::matchSextOfTrunc(const MachineOperand &MO,
3737
LLT SrcTy = MRI.getType(Src);
3838

3939
// Combines without nsw trunc.
40-
if (!(Trunc->getFlags() & MachineInstr::NoSWrap)) {
41-
if (DstTy != SrcTy)
40+
if (!Trunc->getFlag(MachineInstr::NoSWrap)) {
41+
if (DstTy != SrcTy ||
42+
!isLegalOrBeforeLegalizer({TargetOpcode::G_SEXT_INREG, {DstTy, SrcTy}}))
4243
return false;
4344

45+
// Do this for 8 bit values and up. We don't want to do it for e.g. G_TRUNC
46+
// to i1.
4447
unsigned TruncWidth = MRI.getType(Trunc->getReg(0)).getScalarSizeInBits();
48+
if (TruncWidth < 8)
49+
return false;
50+
4551
MatchInfo = [=](MachineIRBuilder &B) {
4652
B.buildSExtInReg(Dst, Src, TruncWidth);
4753
};

llvm/test/CodeGen/AArch64/GlobalISel/combine-with-flags.mir renamed to llvm/test/CodeGen/AArch64/GlobalISel/combine-ext-trunc.mir

Lines changed: 151 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,8 @@ body: |
100100
; CHECK: liveins: $w0, $w1
101101
; CHECK-NEXT: {{ $}}
102102
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
103-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = nuw G_TRUNC [[COPY]](s64)
104-
; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s32)
105-
; CHECK-NEXT: $x1 = COPY [[SEXT]](s64)
103+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32
104+
; CHECK-NEXT: $x1 = COPY [[SEXT_INREG]](s64)
106105
%0:_(s64) = COPY $x0
107106
%2:_(s32) = nuw G_TRUNC %0
108107
%3:_(s64) = G_SEXT %2
@@ -117,9 +116,8 @@ body: |
117116
; CHECK: liveins: $w0, $w1
118117
; CHECK-NEXT: {{ $}}
119118
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
120-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
121-
; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s32)
122-
; CHECK-NEXT: $x1 = COPY [[SEXT]](s64)
119+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32
120+
; CHECK-NEXT: $x1 = COPY [[SEXT_INREG]](s64)
123121
%0:_(s64) = COPY $x0
124122
%2:_(s32) = G_TRUNC %0
125123
%3:_(s64) = G_SEXT %2
@@ -372,3 +370,150 @@ body: |
372370
%3:_(s32) = G_SEXT %2
373371
$w1 = COPY %3
374372
...
373+
---
374+
name: trunc_sext_i32_i16
375+
tracksRegLiveness: true
376+
body: |
377+
bb.0:
378+
liveins: $w0
379+
380+
; CHECK-LABEL: name: trunc_sext_i32_i16
381+
; CHECK: liveins: $w0
382+
; CHECK-NEXT: {{ $}}
383+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
384+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 16
385+
; CHECK-NEXT: $w0 = COPY [[SEXT_INREG]](s32)
386+
%0:_(s32) = COPY $w0
387+
%1:_(s16) = G_TRUNC %0
388+
%2:_(s32) = G_SEXT %1
389+
$w0 = COPY %2
390+
...
391+
---
392+
name: trunc_sext_i32_i1
393+
tracksRegLiveness: true
394+
body: |
395+
bb.0:
396+
liveins: $w0
397+
398+
; CHECK-LABEL: name: trunc_sext_i32_i1
399+
; CHECK: liveins: $w0
400+
; CHECK-NEXT: {{ $}}
401+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
402+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY]](s32)
403+
; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s1)
404+
; CHECK-NEXT: $w0 = COPY [[SEXT]](s32)
405+
%0:_(s32) = COPY $w0
406+
%1:_(s1) = G_TRUNC %0
407+
%2:_(s32) = G_SEXT %1
408+
$w0 = COPY %2
409+
...
410+
---
411+
name: trunc_sext_i32_i2
412+
tracksRegLiveness: true
413+
body: |
414+
bb.0:
415+
liveins: $w0
416+
417+
; CHECK-LABEL: name: trunc_sext_i32_i2
418+
; CHECK: liveins: $w0
419+
; CHECK-NEXT: {{ $}}
420+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
421+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s2) = G_TRUNC [[COPY]](s32)
422+
; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s2)
423+
; CHECK-NEXT: $w0 = COPY [[SEXT]](s32)
424+
%0:_(s32) = COPY $w0
425+
%1:_(s2) = G_TRUNC %0
426+
%2:_(s32) = G_SEXT %1
427+
$w0 = COPY %2
428+
...
429+
---
430+
name: trunc_sext_i32_i8
431+
tracksRegLiveness: true
432+
body: |
433+
bb.0:
434+
liveins: $w0
435+
436+
; CHECK-LABEL: name: trunc_sext_i32_i8
437+
; CHECK: liveins: $w0
438+
; CHECK-NEXT: {{ $}}
439+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
440+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8
441+
; CHECK-NEXT: $w0 = COPY [[SEXT_INREG]](s32)
442+
%0:_(s32) = COPY $w0
443+
%1:_(s8) = G_TRUNC %0
444+
%2:_(s32) = G_SEXT %1
445+
$w0 = COPY %2
446+
...
447+
---
448+
name: trunc_sext_i64_i32
449+
tracksRegLiveness: true
450+
body: |
451+
bb.0:
452+
liveins: $w0, $w1
453+
454+
; CHECK-LABEL: name: trunc_sext_i64_i32
455+
; CHECK: liveins: $w0, $w1
456+
; CHECK-NEXT: {{ $}}
457+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
458+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32
459+
; CHECK-NEXT: $x0 = COPY [[SEXT_INREG]](s64)
460+
%0:_(s64) = COPY $x0
461+
%1:_(s32) = G_TRUNC %0
462+
%2:_(s64) = G_SEXT %1
463+
$x0 = COPY %2
464+
...
465+
---
466+
name: trunc_sext_v2i32_v2i16
467+
tracksRegLiveness: true
468+
body: |
469+
bb.0:
470+
liveins: $w0, $w1
471+
472+
; CHECK-LABEL: name: trunc_sext_v2i32_v2i16
473+
; CHECK: liveins: $w0, $w1
474+
; CHECK-NEXT: {{ $}}
475+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $x0
476+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s32>) = G_SEXT_INREG [[COPY]], 16
477+
; CHECK-NEXT: $x0 = COPY [[SEXT_INREG]](<2 x s32>)
478+
%0:_(<2 x s32>) = COPY $x0
479+
%1:_(<2 x s16>) = G_TRUNC %0
480+
%2:_(<2 x s32>) = G_SEXT %1
481+
$x0 = COPY %2
482+
...
483+
---
484+
name: trunc_sext_v4i16_v4i8
485+
tracksRegLiveness: true
486+
body: |
487+
bb.0:
488+
liveins: $w0, $w1
489+
490+
; CHECK-LABEL: name: trunc_sext_v4i16_v4i8
491+
; CHECK: liveins: $w0, $w1
492+
; CHECK-NEXT: {{ $}}
493+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $x0
494+
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<4 x s16>) = G_SEXT_INREG [[COPY]], 8
495+
; CHECK-NEXT: $x0 = COPY [[SEXT_INREG]](<4 x s16>)
496+
%0:_(<4 x s16>) = COPY $x0
497+
%1:_(<4 x s8>) = G_TRUNC %0
498+
%2:_(<4 x s16>) = G_SEXT %1
499+
$x0 = COPY %2
500+
...
501+
---
502+
name: trunc_sext_mismatching_types
503+
tracksRegLiveness: true
504+
body: |
505+
bb.0:
506+
liveins: $w0, $w1
507+
508+
; CHECK-LABEL: name: trunc_sext_mismatching_types
509+
; CHECK: liveins: $w0, $w1
510+
; CHECK-NEXT: {{ $}}
511+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
512+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s64)
513+
; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[TRUNC]](s16)
514+
; CHECK-NEXT: $w0 = COPY [[SEXT]](s32)
515+
%0:_(s64) = COPY $x0
516+
%1:_(s16) = G_TRUNC %0
517+
%2:_(s32) = G_SEXT %1
518+
$w0 = COPY %2
519+
...

llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-extending-loads.mir

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,8 @@ body: |
469469
; CHECK-NEXT: {{ $}}
470470
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
471471
; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s64) = G_ZEXTLOAD [[COPY]](p0) :: (load (s8))
472-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[ZEXTLOAD]](s64)
473-
; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s32)
474472
; CHECK-NEXT: $x0 = COPY [[ZEXTLOAD]](s64)
475-
; CHECK-NEXT: $x1 = COPY [[SEXT]](s64)
473+
; CHECK-NEXT: $x1 = COPY [[ZEXTLOAD]](s64)
476474
%0:_(p0) = COPY $x0
477475
%1:_(s32) = G_ZEXTLOAD %0 :: (load (s8))
478476
%2:_(s64) = G_ZEXT %1

llvm/test/CodeGen/RISCV/GlobalISel/combine.mir

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ body: |
88
99
; RV64-LABEL: name: nneg_zext
1010
; RV64: [[COPY:%[0-9]+]]:_(s64) = COPY $x10
11-
; RV64-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
12-
; RV64-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[TRUNC]](s32)
13-
; RV64-NEXT: $x10 = COPY [[SEXT]](s64)
11+
; RV64-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[COPY]], 32
12+
; RV64-NEXT: $x10 = COPY [[SEXT_INREG]](s64)
1413
; RV64-NEXT: PseudoRET implicit $x10
1514
%0:_(s64) = COPY $x10
1615
%2:_(s32) = G_TRUNC %0

0 commit comments

Comments
 (0)