summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp31
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-binop.mir40
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-bitcast.mir8
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir4
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-fp-casts.mir18
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-int-ext.mir8
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-int-ptr-casts.mir6
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-load.mir16
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-trunc.mir3
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select-xor.mir11
-rw-r--r--llvm/test/CodeGen/AArch64/GlobalISel/select.mir13
-rw-r--r--llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-flat.mir1
-rw-r--r--llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-smrd.mir19
-rw-r--r--llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir10
-rw-r--r--llvm/test/CodeGen/X86/GlobalISel/x86_64-instructionselect.mir4
15 files changed, 166 insertions, 26 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp
index 0ca4134a577..c59b200298e 100644
--- a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp
@@ -48,6 +48,29 @@ void InstructionSelect::getAnalysisUsage(AnalysisUsage &AU) const {
MachineFunctionPass::getAnalysisUsage(AU);
}
+/// Check whether an instruction \p MI is dead: it only defines dead virtual
+/// registers, and doesn't have other side effects.
+static bool isTriviallyDead(const MachineInstr &MI,
+ const MachineRegisterInfo &MRI) {
+ // If we can move an instruction, we can remove it. Otherwise, it has
+ // a side-effect of some sort.
+ bool SawStore = false;
+ if (!MI.isSafeToMove(/*AA=*/nullptr, SawStore))
+ return false;
+
+ // Instructions without side-effects are dead iff they only define dead vregs.
+ for (auto &MO : MI.operands()) {
+ if (!MO.isReg() || !MO.isDef())
+ continue;
+
+ unsigned Reg = MO.getReg();
+ // Keep Debug uses live: we don't want to have an effect on debug info.
+ if (TargetRegisterInfo::isPhysicalRegister(Reg) || !MRI.use_empty(Reg))
+ return false;
+ }
+ return true;
+}
+
bool InstructionSelect::runOnMachineFunction(MachineFunction &MF) {
const MachineRegisterInfo &MRI = MF.getRegInfo();
@@ -119,6 +142,14 @@ bool InstructionSelect::runOnMachineFunction(MachineFunction &MF) {
DEBUG(dbgs() << "Selecting: \n " << MI);
+ // We could have folded this instruction away already, making it dead.
+ // If so, erase it.
+ if (isTriviallyDead(MI, MRI)) {
+ DEBUG(dbgs() << "Is dead; erasing.\n");
+ MI.eraseFromParent();
+ continue;
+ }
+
if (!ISel->select(MI)) {
// FIXME: It would be nice to dump all inserted instructions. It's
// not obvious how, esp. considering select() can insert after MI.
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-binop.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-binop.mir
index 92a754ffa6f..a15b56fe2d6 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-binop.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-binop.mir
@@ -83,6 +83,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_ADD %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -112,6 +113,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_ADD %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -122,7 +124,7 @@ regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gpr32sp }
-# CHECK-NEXT: - { id: 1, class: gpr32 }
+# CHECK-NEXT: - { id: 1, class: gpr }
# CHECK-NEXT: - { id: 2, class: gpr32sp }
registers:
- { id: 0, class: gpr }
@@ -139,6 +141,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = G_CONSTANT i32 1
%2(s32) = G_ADD %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -149,7 +152,7 @@ regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gpr64sp }
-# CHECK-NEXT: - { id: 1, class: gpr64 }
+# CHECK-NEXT: - { id: 1, class: gpr }
# CHECK-NEXT: - { id: 2, class: gpr64sp }
registers:
- { id: 0, class: gpr }
@@ -166,6 +169,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = G_CONSTANT i32 1
%2(s64) = G_ADD %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -176,7 +180,7 @@ regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gpr32sp }
-# CHECK-NEXT: - { id: 1, class: gpr32 }
+# CHECK-NEXT: - { id: 1, class: gpr }
# CHECK-NEXT: - { id: 2, class: gpr32sp }
registers:
- { id: 0, class: gpr }
@@ -198,6 +202,7 @@ body: |
bb.1:
%2(s32) = G_ADD %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -227,6 +232,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_SUB %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -256,6 +262,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_SUB %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -285,6 +292,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_OR %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -314,6 +322,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_OR %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -345,6 +354,7 @@ body: |
%0(<2 x s32>) = COPY %d0
%1(<2 x s32>) = COPY %d1
%2(<2 x s32>) = G_OR %0, %1
+ %d0 = COPY %2(<2 x s32>)
...
---
@@ -374,6 +384,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_AND %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -403,6 +414,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_AND %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -432,6 +444,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_SHL %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -461,6 +474,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_SHL %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -490,6 +504,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_LSHR %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -519,6 +534,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_LSHR %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -548,6 +564,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_ASHR %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -577,6 +594,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_ASHR %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -607,6 +625,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_MUL %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -636,6 +655,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_MUL %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -664,6 +684,8 @@ body: |
%1:gpr(s64) = COPY %x1
%2:gpr(s64) = G_SMULH %0, %1
%3:gpr(s64) = G_UMULH %0, %1
+ %x0 = COPY %2(s64)
+ %x0 = COPY %3(s64)
...
---
@@ -693,6 +715,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_SDIV %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -722,6 +745,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_SDIV %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -751,6 +775,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_UDIV %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -780,6 +805,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_UDIV %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -809,6 +835,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = COPY %s1
%2(s32) = G_FADD %0, %1
+ %s0 = COPY %2(s32)
...
---
@@ -837,6 +864,7 @@ body: |
%0(s64) = COPY %d0
%1(s64) = COPY %d1
%2(s64) = G_FADD %0, %1
+ %d0 = COPY %2(s64)
...
---
@@ -865,6 +893,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = COPY %s1
%2(s32) = G_FSUB %0, %1
+ %s0 = COPY %2(s32)
...
---
@@ -893,6 +922,7 @@ body: |
%0(s64) = COPY %d0
%1(s64) = COPY %d1
%2(s64) = G_FSUB %0, %1
+ %d0 = COPY %2(s64)
...
---
@@ -921,6 +951,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = COPY %s1
%2(s32) = G_FMUL %0, %1
+ %s0 = COPY %2(s32)
...
---
@@ -949,6 +980,7 @@ body: |
%0(s64) = COPY %d0
%1(s64) = COPY %d1
%2(s64) = G_FMUL %0, %1
+ %d0 = COPY %2(s64)
...
---
@@ -977,6 +1009,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = COPY %s1
%2(s32) = G_FDIV %0, %1
+ %s0 = COPY %2(s32)
...
---
@@ -1005,4 +1038,5 @@ body: |
%0(s64) = COPY %d0
%1(s64) = COPY %d1
%2(s64) = G_FDIV %0, %1
+ %d0 = COPY %2(s64)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-bitcast.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-bitcast.mir
index 2770d780130..5ca63dbc214 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-bitcast.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-bitcast.mir
@@ -34,6 +34,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = G_BITCAST %0
+ %w0 = COPY %1(s32)
...
---
@@ -58,6 +59,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = G_BITCAST %0
+ %s0 = COPY %1(s32)
...
---
@@ -82,6 +84,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = G_BITCAST %0
+ %s0 = COPY %1(s32)
...
---
@@ -106,6 +109,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = G_BITCAST %0
+ %w0 = COPY %1(s32)
...
---
@@ -130,6 +134,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = G_BITCAST %0
+ %x0 = COPY %1(s64)
...
---
@@ -154,6 +159,7 @@ body: |
%0(s64) = COPY %d0
%1(s64) = G_BITCAST %0
+ %d0 = COPY %1(s64)
...
---
@@ -177,6 +183,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = G_BITCAST %0
+ %d0 = COPY %1(s64)
...
---
@@ -201,4 +208,5 @@ body: |
%0(s64) = COPY %d0
%1(s64) = G_BITCAST %0
+ %x0 = COPY %1(s64)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir
index b9953246666..1a5bac9fb7d 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-constant.mir
@@ -23,6 +23,7 @@ registers:
body: |
bb.0:
%0(s32) = G_CONSTANT i32 42
+ %w0 = COPY %0(s32)
...
---
@@ -38,6 +39,7 @@ registers:
body: |
bb.0:
%0(s64) = G_CONSTANT i64 1234567890123
+ %x0 = COPY %0(s64)
...
---
@@ -54,6 +56,7 @@ registers:
body: |
bb.0:
%0(s32) = G_FCONSTANT float 3.5
+ %s0 = COPY %0(s32)
...
---
@@ -70,4 +73,5 @@ registers:
body: |
bb.0:
%0(s64) = G_FCONSTANT double 1.0
+ %d0 = COPY %0(s64)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-casts.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-casts.mir
index b703fb5c495..fbb11a1c7a4 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-casts.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-fp-casts.mir
@@ -49,6 +49,7 @@ body: |
%0(s64) = COPY %d0
%1(s32) = G_FPTRUNC %0
+ %s0 = COPY %1(s32)
...
---
@@ -73,6 +74,7 @@ body: |
%0(s32) = COPY %s0
%1(s64) = G_FPEXT %0
+ %d0 = COPY %1(s64)
...
---
@@ -97,6 +99,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = G_SITOFP %0
+ %s0 = COPY %1(s32)
...
---
@@ -121,6 +124,7 @@ body: |
%0(s64) = COPY %x0
%1(s32) = G_SITOFP %0
+ %s0 = COPY %1(s32)
...
---
@@ -145,6 +149,7 @@ body: |
%0(s32) = COPY %w0
%1(s64) = G_SITOFP %0
+ %d0 = COPY %1(s64)
...
---
@@ -169,6 +174,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = G_SITOFP %0
+ %d0 = COPY %1(s64)
...
---
@@ -193,6 +199,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = G_UITOFP %0
+ %s0 = COPY %1(s32)
...
---
@@ -217,6 +224,7 @@ body: |
%0(s64) = COPY %x0
%1(s32) = G_UITOFP %0
+ %s0 = COPY %1(s32)
...
---
@@ -241,6 +249,7 @@ body: |
%0(s32) = COPY %w0
%1(s64) = G_UITOFP %0
+ %d0 = COPY %1(s64)
...
---
@@ -265,6 +274,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = G_UITOFP %0
+ %d0 = COPY %1(s64)
...
---
@@ -289,6 +299,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = G_FPTOSI %0
+ %w0 = COPY %1(s32)
...
---
@@ -313,6 +324,7 @@ body: |
%0(s64) = COPY %d0
%1(s32) = G_FPTOSI %0
+ %w0 = COPY %1(s32)
...
---
@@ -337,6 +349,7 @@ body: |
%0(s32) = COPY %s0
%1(s64) = G_FPTOSI %0
+ %x0 = COPY %1(s64)
...
---
@@ -361,6 +374,7 @@ body: |
%0(s64) = COPY %d0
%1(s64) = G_FPTOSI %0
+ %x0 = COPY %1(s64)
...
---
@@ -385,6 +399,7 @@ body: |
%0(s32) = COPY %s0
%1(s32) = G_FPTOUI %0
+ %w0 = COPY %1(s32)
...
---
@@ -409,6 +424,7 @@ body: |
%0(s64) = COPY %d0
%1(s32) = G_FPTOUI %0
+ %w0 = COPY %1(s32)
...
---
@@ -433,6 +449,7 @@ body: |
%0(s32) = COPY %s0
%1(s64) = G_FPTOUI %0
+ %x0 = COPY %1(s64)
...
---
@@ -457,4 +474,5 @@ body: |
%0(s64) = COPY %d0
%1(s64) = G_FPTOUI %0
+ %x0 = COPY %1(s64)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ext.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ext.mir
index 5680122edfb..b5da3e60bd2 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ext.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ext.mir
@@ -39,6 +39,7 @@ body: |
%0(s32) = COPY %w0
%1(s64) = G_ANYEXT %0
+ %x0 = COPY %1(s64)
...
---
@@ -63,6 +64,7 @@ body: |
%0(s8) = COPY %w0
%1(s32) = G_ANYEXT %0
+ %w0 = COPY %1(s32)
...
---
@@ -89,6 +91,7 @@ body: |
%0(s32) = COPY %w0
%1(s64) = G_ZEXT %0
+ %x0 = COPY %1(s64)
...
---
@@ -113,6 +116,7 @@ body: |
%0(s8) = COPY %w0
%1(s32) = G_ZEXT %0
+ %w0 = COPY %1(s32)
...
---
@@ -137,6 +141,7 @@ body: |
%0(s8) = COPY %w0
%1(s16) = G_ZEXT %0
+ %w0 = COPY %1(s16)
...
---
@@ -163,6 +168,7 @@ body: |
%0(s32) = COPY %w0
%1(s64) = G_SEXT %0
+ %x0 = COPY %1(s64)
...
---
@@ -187,6 +193,7 @@ body: |
%0(s8) = COPY %w0
%1(s32) = G_SEXT %0
+ %w0 = COPY %1(s32)
...
---
@@ -211,4 +218,5 @@ body: |
%0(s8) = COPY %w0
%1(s16) = G_SEXT %0
+ %w0 = COPY %1(s16)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ptr-casts.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ptr-casts.mir
index 9fa82ddc4d5..6537408f6d9 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ptr-casts.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-int-ptr-casts.mir
@@ -31,6 +31,7 @@ body: |
liveins: %x0
%0(s64) = COPY %x0
%1(p0) = G_INTTOPTR %0
+ %x0 = COPY %1(p0)
...
---
@@ -53,6 +54,7 @@ body: |
liveins: %x0
%0(p0) = COPY %x0
%1(s64) = G_PTRTOINT %0
+ %x0 = COPY %1(s64)
...
---
@@ -75,6 +77,7 @@ body: |
liveins: %x0
%0(p0) = COPY %x0
%1(s32) = G_PTRTOINT %0
+ %w0 = COPY %1(s32)
...
---
@@ -97,6 +100,7 @@ body: |
liveins: %x0
%0(p0) = COPY %x0
%1(s16) = G_PTRTOINT %0
+ %w0 = COPY %1(s16)
...
---
@@ -119,6 +123,7 @@ body: |
liveins: %x0
%0(p0) = COPY %x0
%1(s8) = G_PTRTOINT %0
+ %w0 = COPY %1(s8)
...
---
@@ -141,4 +146,5 @@ body: |
liveins: %x0
%0(p0) = COPY %x0
%1(s1) = G_PTRTOINT %0
+ %w0 = COPY %1(s1)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-load.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-load.mir
index 5c91990d644..0821fc76446 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-load.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-load.mir
@@ -35,7 +35,7 @@ body: |
%0(p0) = COPY %x0
%1(s64) = G_LOAD %0 :: (load 8 from %ir.addr)
-
+ %x0 = COPY %1(s64)
...
---
@@ -60,7 +60,7 @@ body: |
%0(p0) = COPY %x0
%1(s32) = G_LOAD %0 :: (load 4 from %ir.addr)
-
+ %w0 = COPY %1(s32)
...
---
@@ -85,7 +85,7 @@ body: |
%0(p0) = COPY %x0
%1(s16) = G_LOAD %0 :: (load 2 from %ir.addr)
-
+ %w0 = COPY %1(s16)
...
---
@@ -110,7 +110,7 @@ body: |
%0(p0) = COPY %x0
%1(s8) = G_LOAD %0 :: (load 1 from %ir.addr)
-
+ %w0 = COPY %1(s8)
...
---
@@ -135,7 +135,7 @@ body: |
%0(p0) = COPY %x0
%1(s64) = G_LOAD %0 :: (load 8 from %ir.addr)
-
+ %d0 = COPY %1(s64)
...
---
@@ -160,7 +160,7 @@ body: |
%0(p0) = COPY %x0
%1(s32) = G_LOAD %0 :: (load 4 from %ir.addr)
-
+ %s0 = COPY %1(s32)
...
---
@@ -185,7 +185,7 @@ body: |
%0(p0) = COPY %x0
%1(s16) = G_LOAD %0 :: (load 2 from %ir.addr)
-
+ %h0 = COPY %1(s16)
...
---
@@ -210,5 +210,5 @@ body: |
%0(p0) = COPY %x0
%1(s8) = G_LOAD %0 :: (load 1 from %ir.addr)
-
+ %b0 = COPY %1(s8)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-trunc.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-trunc.mir
index e0e04407e9c..fc3546e777f 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-trunc.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-trunc.mir
@@ -29,6 +29,7 @@ body: |
%0(s64) = COPY %x0
%1(s32) = G_TRUNC %0
+ %w0 = COPY %1(s32)
...
---
@@ -52,6 +53,7 @@ body: |
%0(s64) = COPY %x0
%1(s8) = G_TRUNC %0
+ %w0 = COPY %1(s8)
...
---
@@ -75,4 +77,5 @@ body: |
%0(s32) = COPY %w0
%1(s1) = G_TRUNC %0
+ %w0 = COPY %1(s1)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-xor.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-xor.mir
index c8e67c8737e..05c0b021332 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-xor.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-xor.mir
@@ -39,6 +39,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = COPY %w1
%2(s32) = G_XOR %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -68,6 +69,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = COPY %x1
%2(s64) = G_XOR %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -80,7 +82,7 @@ regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gpr32 }
-# CHECK-NEXT: - { id: 1, class: gpr32 }
+# CHECK-NEXT: - { id: 1, class: gpr }
# CHECK-NEXT: - { id: 2, class: gpr32 }
registers:
- { id: 0, class: gpr }
@@ -97,6 +99,7 @@ body: |
%0(s32) = COPY %w0
%1(s32) = G_CONSTANT i64 -1
%2(s32) = G_XOR %0, %1
+ %w0 = COPY %2(s32)
...
---
@@ -108,7 +111,7 @@ regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gpr64 }
-# CHECK-NEXT: - { id: 1, class: gpr64 }
+# CHECK-NEXT: - { id: 1, class: gpr }
# CHECK-NEXT: - { id: 2, class: gpr64 }
registers:
- { id: 0, class: gpr }
@@ -125,6 +128,7 @@ body: |
%0(s64) = COPY %x0
%1(s64) = G_CONSTANT i64 -1
%2(s64) = G_XOR %0, %1
+ %x0 = COPY %2(s64)
...
---
@@ -136,7 +140,7 @@ regBankSelected: true
# CHECK: registers:
# CHECK-NEXT: - { id: 0, class: gpr32 }
-# CHECK-NEXT: - { id: 1, class: gpr32 }
+# CHECK-NEXT: - { id: 1, class: gpr }
# CHECK-NEXT: - { id: 2, class: gpr32 }
registers:
- { id: 0, class: gpr }
@@ -157,4 +161,5 @@ body: |
bb.1:
%0(s32) = COPY %w0
%2(s32) = G_XOR %0, %1
+ %w0 = COPY %2(s32)
...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/select.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select.mir
index 645975b4d27..8bffa085fdc 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select.mir
@@ -47,6 +47,7 @@ stack:
body: |
bb.0:
%0(p0) = G_FRAME_INDEX %stack.0.ptr0
+ %x0 = COPY %0(p0)
...
---
@@ -68,6 +69,7 @@ body: |
%0(p0) = COPY %x0
%1(s64) = G_CONSTANT i64 42
%2(p0) = G_GEP %0, %1(s64)
+ %x0 = COPY %2(p0)
...
---
@@ -83,6 +85,7 @@ body: |
liveins: %x0
%0:gpr(p0) = COPY %x0
%1:gpr(p0) = G_PTR_MASK %0, 3
+ %x0 = COPY %1(p0)
...
---
@@ -101,6 +104,7 @@ registers:
body: |
bb.0:
%0(p0) = G_GLOBAL_VALUE @var_local
+ %x0 = COPY %0(p0)
...
---
@@ -118,6 +122,7 @@ registers:
body: |
bb.0:
%0(p0) = G_GLOBAL_VALUE @var_got
+ %x0 = COPY %0(p0)
...
---
@@ -157,12 +162,15 @@ body: |
%0(s32) = COPY %w0
%1(s1) = G_ICMP intpred(eq), %0, %0
+ %w0 = COPY %1(s1)
%2(s64) = COPY %x0
%3(s1) = G_ICMP intpred(uge), %2, %2
+ %w0 = COPY %3(s1)
%4(p0) = COPY %x0
%5(s1) = G_ICMP intpred(ne), %4, %4
+ %w0 = COPY %5(s1)
...
---
@@ -199,9 +207,11 @@ body: |
%0(s32) = COPY %s0
%1(s1) = G_FCMP floatpred(one), %0, %0
+ %w0 = COPY %1(s1)
%2(s64) = COPY %d0
%3(s1) = G_FCMP floatpred(uge), %2, %2
+ %w0 = COPY %3(s1)
...
@@ -287,12 +297,15 @@ body: |
%1(s32) = COPY %w1
%2(s32) = COPY %w2
%3(s32) = G_SELECT %0, %1, %2
+ %w0 = COPY %3(s32)
%4(s64) = COPY %x0
%5(s64) = COPY %x1
%6(s64) = G_SELECT %0, %4, %5
+ %x0 = COPY %6(s64)
%7(p0) = COPY %x0
%8(p0) = COPY %x1
%9(p0) = G_SELECT %0, %7, %8
+ %x0 = COPY %9(p0)
...
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-flat.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-flat.mir
index c78ed11b73e..e10ffa00c43 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-flat.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-flat.mir
@@ -22,6 +22,7 @@ body: |
%0:vgpr(p1) = COPY %vgpr0_vgpr1
%1:vgpr(s32) = G_LOAD %0 :: (load 4 from %ir.global0)
+ %vgpr0 = COPY %1
...
---
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-smrd.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-smrd.mir
index e23852b74a4..78bf9d8e352 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-smrd.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-load-smrd.mir
@@ -25,25 +25,18 @@ regBankSelected: true
# VI: S_LOAD_DWORD_IMM [[PTR]], 1020, 0
# Immediate overflow for SI
-# FIXME: The immediate gets selected twice, once into the
-# S_LOAD_DWORD instruction and once just as a normal constat.
-# SI: S_MOV_B32 1024
# SI: [[K1024:%[0-9]+]] = S_MOV_B32 1024
# SI: S_LOAD_DWORD_SGPR [[PTR]], [[K1024]], 0
# CI: S_LOAD_DWORD_IMM_ci [[PTR]], 256, 0
# VI: S_LOAD_DWORD_IMM [[PTR]], 1024, 0
# Max immediate offset for VI
-# SI: S_MOV_B32 1048572
# SI: [[K1048572:%[0-9]+]] = S_MOV_B32 1048572
# CI: S_LOAD_DWORD_IMM_ci [[PTR]], 262143
# VI: S_LOAD_DWORD_IMM [[PTR]], 1048572
#
# Immediate overflow for VI
-# FIXME: The immediate gets selected twice, once into the
-# S_LOAD_DWORD instruction and once just as a normal constat.
-# SIVI: S_MOV_B32 1048576
# SIVI: [[K1048576:%[0-9]+]] = S_MOV_B32 1048576
# SIVI: S_LOAD_DWORD_SGPR [[PTR]], [[K1048576]], 0
# CI: S_LOAD_DWORD_IMM_ci [[PTR]], 262144, 0
@@ -76,9 +69,6 @@ regBankSelected: true
# GCN: S_LOAD_DWORD_IMM [[ADD_PTR]], 0, 0
# Max 32-bit byte offset
-# FIXME: The immediate gets selected twice, once into the
-# S_LOAD_DWORD instruction and once just as a normal constat.
-# SIVI: S_MOV_B32 4294967292
# SIVI: [[K4294967292:%[0-9]+]] = S_MOV_B32 4294967292
# SIVI: S_LOAD_DWORD_SGPR [[PTR]], [[K4294967292]], 0
# CI: S_LOAD_DWORD_IMM_ci [[PTR]], 1073741823, 0
@@ -106,38 +96,47 @@ body: |
%1:sgpr(s64) = G_CONSTANT i64 4
%2:sgpr(p2) = G_GEP %0, %1
%3:sgpr(s32) = G_LOAD %2 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %3
%4:sgpr(s64) = G_CONSTANT i64 1020
%5:sgpr(p2) = G_GEP %0, %4
%6:sgpr(s32) = G_LOAD %5 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %6
%7:sgpr(s64) = G_CONSTANT i64 1024
%8:sgpr(p2) = G_GEP %0, %7
%9:sgpr(s32) = G_LOAD %8 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %9
%10:sgpr(s64) = G_CONSTANT i64 1048572
%11:sgpr(p2) = G_GEP %0, %10
%12:sgpr(s32) = G_LOAD %11 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %12
%13:sgpr(s64) = G_CONSTANT i64 1048576
%14:sgpr(p2) = G_GEP %0, %13
%15:sgpr(s32) = G_LOAD %14 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %15
%16:sgpr(s64) = G_CONSTANT i64 17179869180
%17:sgpr(p2) = G_GEP %0, %16
%18:sgpr(s32) = G_LOAD %17 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %18
%19:sgpr(s64) = G_CONSTANT i64 17179869184
%20:sgpr(p2) = G_GEP %0, %19
%21:sgpr(s32) = G_LOAD %20 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %21
%22:sgpr(s64) = G_CONSTANT i64 4294967292
%23:sgpr(p2) = G_GEP %0, %22
%24:sgpr(s32) = G_LOAD %23 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %24
%25:sgpr(s64) = G_CONSTANT i64 4294967296
%26:sgpr(p2) = G_GEP %0, %25
%27:sgpr(s32) = G_LOAD %26 :: (load 4 from %ir.const0)
+ %sgpr0 = COPY %27
...
---
diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir b/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir
index 28224b40880..66d9033a6d7 100644
--- a/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir
+++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-instruction-select.mir
@@ -326,13 +326,19 @@ body: |
; CHECK: [[FI32VREG:%[0-9]+]] = ADDri %fixed-stack.[[FI32]], 0, 14, _, _
%1(s32) = G_LOAD %0(p0) :: (load 4)
- ; CHECK: {{%[0-9]+}} = LDRi12 [[FI32VREG]], 0, 14, _
+ ; CHECK: [[LD32VREG:%[0-9]+]] = LDRi12 [[FI32VREG]], 0, 14, _
+
+ %r0 = COPY %1
+ ; CHECK: %r0 = COPY [[LD32VREG]]
%2(p0) = G_FRAME_INDEX %fixed-stack.0
; CHECK: [[FI1VREG:%[0-9]+]] = ADDri %fixed-stack.[[FI1]], 0, 14, _, _
%3(s1) = G_LOAD %2(p0) :: (load 1)
- ; CHECK: {{%[0-9]+}} = LDRBi12 [[FI1VREG]], 0, 14, _
+ ; CHECK: [[LD1VREG:%[0-9]+]] = LDRBi12 [[FI1VREG]], 0, 14, _
+
+ %r0 = COPY %3
+ ; CHECK: %r0 = COPY [[LD1VREG]]
BX_RET 14, _
; CHECK: BX_RET 14, _
diff --git a/llvm/test/CodeGen/X86/GlobalISel/x86_64-instructionselect.mir b/llvm/test/CodeGen/X86/GlobalISel/x86_64-instructionselect.mir
index 7aa1a4e6966..a4f6f2d6da9 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/x86_64-instructionselect.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/x86_64-instructionselect.mir
@@ -87,6 +87,7 @@ body: |
%0(s64) = COPY %rdi
%1(s64) = COPY %rsi
%2(s64) = G_ADD %0, %1
+ %rax = COPY %2(s64)
...
@@ -112,6 +113,7 @@ body: |
%0(s32) = COPY %edi
%1(s32) = COPY %esi
%2(s32) = G_ADD %0, %1
+ %rax = COPY %2(s32)
...
@@ -137,6 +139,7 @@ body: |
%0(s64) = COPY %rdi
%1(s64) = COPY %rsi
%2(s64) = G_SUB %0, %1
+ %rax = COPY %2(s64)
...
@@ -162,6 +165,7 @@ body: |
%0(s32) = COPY %edi
%1(s32) = COPY %esi
%2(s32) = G_SUB %0, %1
+ %rax = COPY %2(s32)
...
OpenPOWER on IntegriCloud