Skip to content

Commit 381281a

Browse files
committed
[X86][GISel] Merge builders for G_IMPLICIT_DEF, G_PHI, G_FREEZE, and G_CONSTANT_FOLD_BARRIER
Unify the legality rule sets for value-transport operations (G_IMPLICIT_DEF, G_PHI, G_FREEZE, and G_CONSTANT_FOLD_BARRIER). These instructions only define/carry values and should therefore accept the same set of legal types.
1 parent 0024770 commit 381281a

File tree

2 files changed

+11
-34
lines changed

2 files changed

+11
-34
lines changed

llvm/lib/Target/X86/GISel/X86LegalizerInfo.cpp

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,10 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
8989
// 32/64-bits needs support for s64/s128 to handle cases:
9090
// s64 = EXTEND (G_IMPLICIT_DEF s32) -> s64 = G_IMPLICIT_DEF
9191
// s128 = EXTEND (G_IMPLICIT_DEF s32/s64) -> s128 = G_IMPLICIT_DEF
92-
getActionDefinitionsBuilder(G_IMPLICIT_DEF)
92+
getActionDefinitionsBuilder(
93+
{G_IMPLICIT_DEF, G_PHI, G_FREEZE, G_CONSTANT_FOLD_BARRIER})
9394
.legalFor({p0, s1, s8, s16, s32, s64})
95+
.legalFor(UseX87, {s80})
9496
.legalFor(Is64Bit, {s128})
9597
.legalFor(HasSSE2, {v16s8, v8s16, v4s32, v2s64})
9698
.legalFor(HasAVX, {v32s8, v16s16, v8s32, v4s64})
@@ -103,7 +105,7 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
103105
.clampMinNumElements(0, s32, 4)
104106
.clampMinNumElements(0, s64, 2)
105107
.clampMaxNumElements(0, s8, HasAVX512 ? 64 : (HasAVX ? 32 : 16))
106-
.clampMaxNumElements(0, s16, HasAVX512 ? 32 : (HasAVX ? 16 : 8))
108+
.clampMaxNumElements(0, s16, HasAVX512 ? 32 : (HasAVX ? 16 : 8))
107109
.clampMaxNumElements(0, s32, HasAVX512 ? 16 : (HasAVX ? 8 : 4))
108110
.clampMaxNumElements(0, s64, HasAVX512 ? 8 : (HasAVX ? 4 : 2))
109111
.clampMaxNumElements(0, p0,
@@ -303,26 +305,6 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
303305
.clampScalar(1, s16, sMaxScalar)
304306
.scalarSameSizeAs(0, 1);
305307

306-
// control flow
307-
getActionDefinitionsBuilder(G_PHI)
308-
.legalFor({s8, s16, s32, p0})
309-
.legalFor(UseX87, {s80})
310-
.legalFor(Is64Bit, {s64})
311-
.legalFor(HasSSE1, {v16s8, v8s16, v4s32, v2s64})
312-
.legalFor(HasAVX, {v32s8, v16s16, v8s32, v4s64})
313-
.legalFor(HasAVX512, {v64s8, v32s16, v16s32, v8s64})
314-
.clampMinNumElements(0, s8, 16)
315-
.clampMinNumElements(0, s16, 8)
316-
.clampMinNumElements(0, s32, 4)
317-
.clampMinNumElements(0, s64, 2)
318-
.clampMaxNumElements(0, s8, HasAVX512 ? 64 : (HasAVX ? 32 : 16))
319-
.clampMaxNumElements(0, s16, HasAVX512 ? 32 : (HasAVX ? 16 : 8))
320-
.clampMaxNumElements(0, s32, HasAVX512 ? 16 : (HasAVX ? 8 : 4))
321-
.clampMaxNumElements(0, s64, HasAVX512 ? 8 : (HasAVX ? 4 : 2))
322-
.widenScalarToNextPow2(0, /*Min=*/32)
323-
.clampScalar(0, s8, sMaxScalar)
324-
.scalarize(0);
325-
326308
getActionDefinitionsBuilder(G_BRCOND).legalFor({s1});
327309

328310
// pointer handling
@@ -606,11 +588,6 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
606588
.minScalar(0, LLT::scalar(32))
607589
.libcall();
608590

609-
getActionDefinitionsBuilder({G_FREEZE, G_CONSTANT_FOLD_BARRIER})
610-
.legalFor({s8, s16, s32, s64, p0})
611-
.widenScalarToNextPow2(0, /*Min=*/8)
612-
.clampScalar(0, s8, sMaxScalar);
613-
614591
getLegacyLegalizerInfo().computeTables();
615592
verify(*STI.getInstrInfo());
616593
}

llvm/test/CodeGen/X86/GlobalISel/legalize-phi.mir

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,21 @@ body: |
148148
; CHECK-NEXT: {{ $}}
149149
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $edi
150150
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $esi
151+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[COPY1]](s32)
151152
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $edx
153+
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[COPY2]](s32)
152154
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
153155
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s8) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
154-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s8)
155-
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[COPY1]](s32)
156-
; CHECK-NEXT: G_BRCOND [[TRUNC]](s1), %bb.2
156+
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[ICMP]](s8)
157+
; CHECK-NEXT: G_BRCOND [[TRUNC1]](s1), %bb.2
157158
; CHECK-NEXT: {{ $}}
158159
; CHECK-NEXT: bb.1.cond.false:
159160
; CHECK-NEXT: successors: %bb.2(0x80000000)
160161
; CHECK-NEXT: {{ $}}
161-
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[COPY2]](s32)
162-
; CHECK-NEXT: {{ $}}
163162
; CHECK-NEXT: bb.2.cond.end:
164-
; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s8) = G_PHI [[TRUNC2]](s8), %bb.1, [[TRUNC1]](s8), %bb.0
165-
; CHECK-NEXT: $al = COPY [[PHI]](s8)
163+
; CHECK-NEXT: [[PHI:%[0-9]+]]:_(s1) = G_PHI [[TRUNC2]](s1), %bb.1, [[TRUNC]](s1), %bb.0
164+
; CHECK-NEXT: [[EXT:%[0-9]+]]:_(s8) = G_ANYEXT [[PHI]](s1)
165+
; CHECK-NEXT: $al = COPY [[EXT]](s8)
166166
; CHECK-NEXT: RET 0, implicit $al
167167
bb.1.entry:
168168
successors: %bb.3(0x40000000), %bb.2(0x40000000)

0 commit comments

Comments
 (0)