[llvm] r354310 - [ARM GlobalISel] Support G_PHI for Thumb2
Diana Picus via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 19 02:26:47 PST 2019
Author: rovka
Date: Tue Feb 19 02:26:47 2019
New Revision: 354310
URL: http://llvm.org/viewvc/llvm-project?rev=354310&view=rev
Log:
[ARM GlobalISel] Support G_PHI for Thumb2
Same as arm mode.
Added:
llvm/trunk/test/CodeGen/ARM/GlobalISel/thumb-select-phi.mir
Modified:
llvm/trunk/lib/Target/ARM/ARMLegalizerInfo.cpp
llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-control-flow.mir
llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir
Modified: llvm/trunk/lib/Target/ARM/ARMLegalizerInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMLegalizerInfo.cpp?rev=354310&r1=354309&r2=354310&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMLegalizerInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMLegalizerInfo.cpp Tue Feb 19 02:26:47 2019
@@ -138,6 +138,11 @@ ARMLegalizerInfo::ARMLegalizerInfo(const
{s32, p0, 32, 8},
{p0, p0, 32, 8}});
+ auto &PhiBuilder =
+ getActionDefinitionsBuilder(G_PHI)
+ .legalFor({s32, p0})
+ .minScalar(0, s32);
+
getActionDefinitionsBuilder(G_GEP).legalFor({{p0, s32}});
getActionDefinitionsBuilder(G_BRCOND).legalFor({s1});
@@ -172,11 +177,6 @@ ARMLegalizerInfo::ARMLegalizerInfo(const
.clampScalar(0, s32, s32);
}
- // We're keeping these builders around because we'll want to add support for
- // floating point to them.
- auto &PhiBuilder =
- getActionDefinitionsBuilder(G_PHI).legalFor({s32, p0}).minScalar(0, s32);
-
if (!ST.useSoftFloat() && ST.hasVFP2()) {
getActionDefinitionsBuilder(
{G_FADD, G_FSUB, G_FMUL, G_FDIV, G_FCONSTANT, G_FNEG})
Modified: llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-control-flow.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-control-flow.mir?rev=354310&r1=354309&r2=354310&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-control-flow.mir (original)
+++ llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalize-control-flow.mir Tue Feb 19 02:26:47 2019
@@ -2,6 +2,10 @@
# RUN: llc -mtriple thumb-- -mattr=+v6t2 -run-pass=legalizer %s -o - | FileCheck %s
--- |
define void @test_brcond() { ret void }
+
+ define void @test_phi_s32() { ret void }
+ define void @test_phi_p0() { ret void }
+ define void @test_phi_s8() { ret void }
...
---
name: test_brcond
@@ -37,3 +41,130 @@ body: |
BX_RET 14, $noreg, implicit $r0
...
+---
+name: test_phi_s32
+# CHECK-LABEL: name: test_phi_s32
+legalized: false
+# CHECK: legalized: true
+regBankSelected: false
+selected: false
+tracksRegLiveness: true
+registers:
+ - { id: 0, class: _ }
+ - { id: 1, class: _ }
+ - { id: 2, class: _ }
+ - { id: 3, class: _ }
+ - { id: 4, class: _ }
+body: |
+ bb.0:
+ liveins: $r0, $r1, $r2
+
+ %0(s32) = COPY $r0
+ %1(s1) = G_TRUNC %0(s32)
+
+ %2(s32) = COPY $r1
+ %3(s32) = COPY $r2
+
+ G_BRCOND %1(s1), %bb.1
+ G_BR %bb.2
+
+ bb.1:
+ G_BR %bb.2
+
+ bb.2:
+ %4(s32) = G_PHI %2(s32), %bb.0, %3(s32), %bb.1
+ ; G_PHI with s32 is legal, so we should find it unchanged in the output
+ ; CHECK: G_PHI {{%[0-9]+}}(s32), %bb.0, {{%[0-9]+}}(s32), %bb.1
+ $r0 = COPY %4(s32)
+ BX_RET 14, $noreg, implicit $r0
+...
+---
+name: test_phi_p0
+# CHECK-LABEL: name: test_phi_p0
+legalized: false
+# CHECK: legalized: true
+regBankSelected: false
+selected: false
+tracksRegLiveness: true
+registers:
+ - { id: 0, class: _ }
+ - { id: 1, class: _ }
+ - { id: 2, class: _ }
+ - { id: 3, class: _ }
+ - { id: 4, class: _ }
+body: |
+ bb.0:
+ liveins: $r0, $r1, $r2
+
+ %0(s32) = COPY $r0
+ %1(s1) = G_TRUNC %0(s32)
+
+ %2(p0) = COPY $r1
+ %3(p0) = COPY $r2
+
+ G_BRCOND %1(s1), %bb.1
+ G_BR %bb.2
+
+ bb.1:
+ G_BR %bb.2
+
+ bb.2:
+ %4(p0) = G_PHI %2(p0), %bb.0, %3(p0), %bb.1
+ ; G_PHI with p0 is legal, so we should find it unchanged in the output
+ ; CHECK: G_PHI {{%[0-9]+}}(p0), %bb.0, {{%[0-9]+}}(p0), %bb.1
+ $r0 = COPY %4(p0)
+ BX_RET 14, $noreg, implicit $r0
+...
+---
+name: test_phi_s8
+# CHECK-LABEL: name: test_phi_s8
+legalized: false
+# CHECK: legalized: true
+regBankSelected: false
+selected: false
+tracksRegLiveness: true
+registers:
+ - { id: 0, class: _ }
+ - { id: 1, class: _ }
+ - { id: 2, class: _ }
+ - { id: 3, class: _ }
+ - { id: 4, class: _ }
+ - { id: 5, class: _ }
+ - { id: 6, class: _ }
+ - { id: 7, class: _ }
+body: |
+ bb.0:
+ liveins: $r0, $r1, $r2
+
+ %0(s32) = COPY $r0
+ %1(s1) = G_TRUNC %0(s32)
+
+ %2(s32) = COPY $r1
+ %3(s8) = G_TRUNC %2(s32)
+ ; CHECK: [[R1:%[0-9]+]]:_(s32) = COPY $r1
+
+ %4(s32) = COPY $r2
+ %5(s8) = G_TRUNC %4(s32)
+ ; CHECK: [[R2:%[0-9]+]]:_(s32) = COPY $r2
+
+ ; CHECK: [[V1:%[0-9]+]]:_(s32) = COPY [[R1]]
+
+ G_BRCOND %1(s1), %bb.1
+ G_BR %bb.2
+
+ bb.1:
+ ; CHECK: [[V2:%[0-9]+]]:_(s32) = COPY [[R2]]
+ G_BR %bb.2
+
+ bb.2:
+ %6(s8) = G_PHI %3(s8), %bb.0, %5(s8), %bb.1
+ ; G_PHI with s8 should widen, and all the truncs and exts should be combined
+ ; away into a bunch of redundant copies
+ ; CHECK: [[V:%[0-9]+]]:_(s32) = G_PHI [[V1]](s32), %bb.0, [[V2]](s32), %bb.1
+
+ %7(s32) = G_ANYEXT %6(s8)
+ $r0 = COPY %7(s32)
+ ; CHECK: [[R:%[0-9]+]]:_(s32) = COPY [[V]]
+ ; CHECK: $r0 = COPY [[R]](s32)
+ BX_RET 14, $noreg, implicit $r0
+...
Modified: llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir?rev=354310&r1=354309&r2=354310&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir (original)
+++ llvm/trunk/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir Tue Feb 19 02:26:47 2019
@@ -5,11 +5,7 @@
define void @test_constants_s64() { ret void }
-
- define void @test_phi_s32() { ret void }
- define void @test_phi_p0() { ret void }
define void @test_phi_s64() #0 { ret void }
- define void @test_phi_s8() { ret void }
@a_global = global i32 42
define void @test_global_variable() { ret void }
@@ -104,80 +100,6 @@ body: |
BX_RET 14, $noreg
...
---
-name: test_phi_s32
-# CHECK-LABEL: name: test_phi_s32
-legalized: false
-# CHECK: legalized: true
-regBankSelected: false
-selected: false
-tracksRegLiveness: true
-registers:
- - { id: 0, class: _ }
- - { id: 1, class: _ }
- - { id: 2, class: _ }
- - { id: 3, class: _ }
- - { id: 4, class: _ }
-body: |
- bb.0:
- liveins: $r0, $r1, $r2
-
- %0(s32) = COPY $r0
- %1(s1) = G_TRUNC %0(s32)
-
- %2(s32) = COPY $r1
- %3(s32) = COPY $r2
-
- G_BRCOND %1(s1), %bb.1
- G_BR %bb.2
-
- bb.1:
- G_BR %bb.2
-
- bb.2:
- %4(s32) = G_PHI %2(s32), %bb.0, %3(s32), %bb.1
- ; G_PHI with s32 is legal, so we should find it unchanged in the output
- ; CHECK: G_PHI {{%[0-9]+}}(s32), %bb.0, {{%[0-9]+}}(s32), %bb.1
- $r0 = COPY %4(s32)
- BX_RET 14, $noreg, implicit $r0
-...
----
-name: test_phi_p0
-# CHECK-LABEL: name: test_phi_p0
-legalized: false
-# CHECK: legalized: true
-regBankSelected: false
-selected: false
-tracksRegLiveness: true
-registers:
- - { id: 0, class: _ }
- - { id: 1, class: _ }
- - { id: 2, class: _ }
- - { id: 3, class: _ }
- - { id: 4, class: _ }
-body: |
- bb.0:
- liveins: $r0, $r1, $r2
-
- %0(s32) = COPY $r0
- %1(s1) = G_TRUNC %0(s32)
-
- %2(p0) = COPY $r1
- %3(p0) = COPY $r2
-
- G_BRCOND %1(s1), %bb.1
- G_BR %bb.2
-
- bb.1:
- G_BR %bb.2
-
- bb.2:
- %4(p0) = G_PHI %2(p0), %bb.0, %3(p0), %bb.1
- ; G_PHI with p0 is legal, so we should find it unchanged in the output
- ; CHECK: G_PHI {{%[0-9]+}}(p0), %bb.0, {{%[0-9]+}}(p0), %bb.1
- $r0 = COPY %4(p0)
- BX_RET 14, $noreg, implicit $r0
-...
----
name: test_phi_s64
# CHECK-LABEL: name: test_phi_s64
legalized: false
@@ -216,59 +138,6 @@ body: |
BX_RET 14, $noreg, implicit $d0
...
---
-name: test_phi_s8
-# CHECK-LABEL: name: test_phi_s8
-legalized: false
-# CHECK: legalized: true
-regBankSelected: false
-selected: false
-tracksRegLiveness: true
-registers:
- - { id: 0, class: _ }
- - { id: 1, class: _ }
- - { id: 2, class: _ }
- - { id: 3, class: _ }
- - { id: 4, class: _ }
- - { id: 5, class: _ }
- - { id: 6, class: _ }
- - { id: 7, class: _ }
-body: |
- bb.0:
- liveins: $r0, $r1, $r2
-
- %0(s32) = COPY $r0
- %1(s1) = G_TRUNC %0(s32)
-
- %2(s32) = COPY $r1
- %3(s8) = G_TRUNC %2(s32)
- ; CHECK: [[R1:%[0-9]+]]:_(s32) = COPY $r1
-
- %4(s32) = COPY $r2
- %5(s8) = G_TRUNC %4(s32)
- ; CHECK: [[R2:%[0-9]+]]:_(s32) = COPY $r2
-
- ; CHECK: [[V1:%[0-9]+]]:_(s32) = COPY [[R1]]
-
- G_BRCOND %1(s1), %bb.1
- G_BR %bb.2
-
- bb.1:
- ; CHECK: [[V2:%[0-9]+]]:_(s32) = COPY [[R2]]
- G_BR %bb.2
-
- bb.2:
- %6(s8) = G_PHI %3(s8), %bb.0, %5(s8), %bb.1
- ; G_PHI with s8 should widen, and all the truncs and exts should be combined
- ; away into a bunch of redundant copies
- ; CHECK: [[V:%[0-9]+]]:_(s32) = G_PHI [[V1]](s32), %bb.0, [[V2]](s32), %bb.1
-
- %7(s32) = G_ANYEXT %6(s8)
- $r0 = COPY %7(s32)
- ; CHECK: [[R:%[0-9]+]]:_(s32) = COPY [[V]]
- ; CHECK: $r0 = COPY [[R]](s32)
- BX_RET 14, $noreg, implicit $r0
-...
----
name: test_global_variable
# CHECK-LABEL: name: test_global_variable
legalized: false
Added: llvm/trunk/test/CodeGen/ARM/GlobalISel/thumb-select-phi.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/GlobalISel/thumb-select-phi.mir?rev=354310&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/GlobalISel/thumb-select-phi.mir (added)
+++ llvm/trunk/test/CodeGen/ARM/GlobalISel/thumb-select-phi.mir Tue Feb 19 02:26:47 2019
@@ -0,0 +1,50 @@
+# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
+--- |
+ define void @test_phi_s32() { ret void }
+...
+---
+name: test_phi_s32
+# CHECK-LABEL: name: test_phi_s32
+legalized: true
+regBankSelected: true
+selected: false
+# CHECK: selected: true
+tracksRegLiveness: true
+registers:
+ - { id: 0, class: gprb }
+ - { id: 1, class: gprb }
+ - { id: 2, class: gprb }
+ - { id: 3, class: gprb }
+ - { id: 4, class: gprb }
+body: |
+ bb.0:
+ ; CHECK: [[BB1:bb.0]]:
+ successors: %bb.1(0x40000000), %bb.2(0x40000000)
+ liveins: $r0, $r1, $r2
+
+ %0(s32) = COPY $r0
+ %1(s1) = G_TRUNC %0(s32)
+
+ %2(s32) = COPY $r1
+ %3(s32) = COPY $r2
+ ; CHECK: [[V1:%[0-9]+]]:gpr = COPY $r1
+ ; CHECK: [[V2:%[0-9]+]]:gpr = COPY $r2
+
+ G_BRCOND %1(s1), %bb.1
+ G_BR %bb.2
+
+ bb.1:
+ ; CHECK: [[BB2:bb.1]]:
+ successors: %bb.2(0x80000000)
+
+ G_BR %bb.2
+ ; CHECK: B %bb.2
+
+ bb.2:
+ ; CHECK: bb.2
+ %4(s32) = G_PHI %2(s32), %bb.0, %3(s32), %bb.1
+ ; CHECK: {{%[0-9]+}}:gpr = PHI [[V1]], %[[BB1]], [[V2]], %[[BB2]]
+
+ $r0 = COPY %4(s32)
+ BX_RET 14, $noreg, implicit $r0
+...
More information about the llvm-commits
mailing list