From 5e10016f03c6a7ac44cedda54401b27b650b9aa4 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Fri, 24 Apr 2015 01:57:58 +0000 Subject: [PATCH] R600/SI: Fix verifier error when producing v_madmk_f32 Copy the kill flags when swapping the operands. llvm-svn: 235687 --- llvm/lib/Target/R600/SIInstrInfo.cpp | 3 +++ llvm/test/CodeGen/R600/madmk.ll | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/llvm/lib/Target/R600/SIInstrInfo.cpp b/llvm/lib/Target/R600/SIInstrInfo.cpp index 6617075..d647c25 100644 --- a/llvm/lib/Target/R600/SIInstrInfo.cpp +++ b/llvm/lib/Target/R600/SIInstrInfo.cpp @@ -970,8 +970,11 @@ bool SIInstrInfo::FoldImmediate(MachineInstr *UseMI, MachineInstr *DefMI, unsigned Src2SubReg = Src2->getSubReg(); Src0->setReg(Src1Reg); Src0->setSubReg(Src1SubReg); + Src0->setIsKill(Src1->isKill()); + Src1->setReg(Src2Reg); Src1->setSubReg(Src2SubReg); + Src1->setIsKill(Src2->isKill()); Src2->ChangeToImmediate(Imm); diff --git a/llvm/test/CodeGen/R600/madmk.ll b/llvm/test/CodeGen/R600/madmk.ll index 71615e9..ba7bb22 100644 --- a/llvm/test/CodeGen/R600/madmk.ll +++ b/llvm/test/CodeGen/R600/madmk.ll @@ -179,3 +179,27 @@ define void @madmk_add_inline_imm_f32(float addrspace(1)* noalias %out, float ad store float %madmk, float addrspace(1)* %out.gep, align 4 ret void } + +; SI-LABEL: {{^}}kill_madmk_verifier_error: +; SI: s_xor_b64 +; SI: v_madmk_f32_e32 {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}, 0x472aee8c +; SI: s_or_b64 +define void @kill_madmk_verifier_error() nounwind { +bb: + br label %bb2 + +bb1: ; preds = %bb2 + ret void + +bb2: ; preds = %bb6, %bb + %tmp = phi float [ undef, %bb ], [ %tmp8, %bb6 ] + %tmp3 = fsub float undef, %tmp + %tmp5 = fcmp oeq float %tmp3, 1.000000e+04 + br i1 %tmp5, label %bb1, label %bb6 + +bb6: ; preds = %bb2 + %tmp4 = fmul float %tmp, undef + %tmp7 = fmul float %tmp4, 0x40E55DD180000000 + %tmp8 = fadd float %tmp7, undef + br label %bb2 +} -- 2.7.4