summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/CodeGen
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-08-01 18:13:16 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-08-01 18:13:16 +0000
commit5faa533e47b0e54b04166b0257c5ebb48e6ffcaa (patch)
tree64829b9d4e7d7d19677de4e9f57e6bf6bc3fee90 /llvm/unittests/CodeGen
parent87af0b191150e2a7e539a3b1d0655e64d4ab485f (diff)
downloadbcm5719-llvm-5faa533e47b0e54b04166b0257c5ebb48e6ffcaa.tar.gz
bcm5719-llvm-5faa533e47b0e54b04166b0257c5ebb48e6ffcaa.zip
GlobalISel: Fix widenScalar for G_MERGE_VALUES to pointer
AMDGPU testcase isn't broken now, but will be in a future patch without this. llvm-svn: 367591
Diffstat (limited to 'llvm/unittests/CodeGen')
-rw-r--r--llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp b/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp
index d0f025b398b..f3bee640b13 100644
--- a/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/LegalizerHelperTest.cpp
@@ -1004,4 +1004,42 @@ TEST_F(GISelMITest, LowerMergeValues) {
EXPECT_TRUE(CheckMachineFunction(*MF, CheckStr)) << *MF;
}
+
+TEST_F(GISelMITest, WidenScalarMergeValuesPointer) {
+ if (!TM)
+ return;
+
+ DefineLegalizerInfo(A, {});
+
+ AInfo Info(MF->getSubtarget());
+ DummyGISelObserver Observer;
+ LegalizerHelper Helper(*MF, Info, Observer, B);
+ B.setInsertPt(*EntryMBB, EntryMBB->end());
+
+ const LLT S32 = LLT::scalar(32);
+ const LLT S64 = LLT::scalar(64);
+ const LLT P0 = LLT::pointer(0, 64);
+
+ auto Lo = B.buildTrunc(S32, Copies[0]);
+ auto Hi = B.buildTrunc(S32, Copies[1]);
+
+ auto Merge = B.buildMerge(P0, {Lo.getReg(0), Hi.getReg(0)});
+
+ EXPECT_EQ(LegalizerHelper::LegalizeResult::Legalized,
+ Helper.widenScalar(*Merge, 1, S64));
+
+ auto CheckStr = R"(
+ CHECK: [[TRUNC0:%[0-9]+]]:_(s32) = G_TRUNC
+ CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC
+ CHECK: [[ZEXT_TRUNC0:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC0]]
+ CHECK: [[ZEXT_TRUNC1:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]]
+ CHECK: [[SHIFT_AMT:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
+ CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT_TRUNC1]]:_, [[SHIFT_AMT]]
+ CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[ZEXT_TRUNC0]]:_, [[SHL]]
+ CHECK: [[INTTOPTR:%[0-9]+]]:_(p0) = G_INTTOPTR [[OR]]:_(s64)
+ )";
+
+ EXPECT_TRUE(CheckMachineFunction(*MF, CheckStr)) << *MF;
+}
+
} // namespace
OpenPOWER on IntegriCloud