summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2018-08-06 15:40:20 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2018-08-06 15:40:20 +0000
commit0d1b3934e27f72f706345678204a87f72007ed64 (patch)
tree8c1ae6eb70d8fa4404206b66ad42fea39785cf1a /llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
parent58e0322545a9a536270f40883339b64d6d690618 (diff)
downloadbcm5719-llvm-0d1b3934e27f72f706345678204a87f72007ed64.tar.gz
bcm5719-llvm-0d1b3934e27f72f706345678204a87f72007ed64.zip
AMDGPU: Fold v_lshl_or_b32 with 0 src0
Appears from expansion of some packed cases. llvm-svn: 339025
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIFoldOperands.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/SIFoldOperands.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIFoldOperands.cpp b/llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
index 338cabcb906..e2ba28815a8 100644
--- a/llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
+++ b/llvm/lib/Target/AMDGPU/SIFoldOperands.cpp
@@ -550,6 +550,19 @@ static bool tryConstantFoldOp(MachineRegisterInfo &MRI,
if (!Src0->isImm() && !Src1->isImm())
return false;
+ if (MI->getOpcode() == AMDGPU::V_LSHL_OR_B32) {
+ if (Src0->isImm() && Src0->getImm() == 0) {
+ // v_lshl_or_b32 0, X, Y -> copy Y
+ // v_lshl_or_b32 0, X, K -> v_mov_b32 K
+ bool UseCopy = TII->getNamedOperand(*MI, AMDGPU::OpName::src2)->isReg();
+ MI->RemoveOperand(Src1Idx);
+ MI->RemoveOperand(Src0Idx);
+
+ MI->setDesc(TII->get(UseCopy ? AMDGPU::COPY : AMDGPU::V_MOV_B32_e32));
+ return true;
+ }
+ }
+
// and k0, k1 -> v_mov_b32 (k0 & k1)
// or k0, k1 -> v_mov_b32 (k0 | k1)
// xor k0, k1 -> v_mov_b32 (k0 ^ k1)
OpenPOWER on IntegriCloud