diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-08-06 15:40:20 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2018-08-06 15:40:20 +0000 |
commit | 0d1b3934e27f72f706345678204a87f72007ed64 (patch) | |
tree | 8c1ae6eb70d8fa4404206b66ad42fea39785cf1a /llvm/lib/Target/AMDGPU/SIFoldOperands.cpp | |
parent | 58e0322545a9a536270f40883339b64d6d690618 (diff) | |
download | bcm5719-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.cpp | 13 |
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) |