diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUInstructions.td')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUInstructions.td | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td index 9e76c47038b..9db6946ceb4 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td +++ b/llvm/lib/Target/AMDGPU/AMDGPUInstructions.td @@ -158,20 +158,30 @@ def brtarget : Operand<OtherVT>; class HasOneUseUnaryOp<SDPatternOperator op> : PatFrag< (ops node:$src0), (op $src0), - [{ return N->hasOneUse(); }] ->; + [{ return N->hasOneUse(); }]> { + + let GISelPredicateCode = [{ + return MRI.hasOneNonDBGUse(MI.getOperand(0).getReg()); + }]; +} class HasOneUseBinOp<SDPatternOperator op> : PatFrag< (ops node:$src0, node:$src1), (op $src0, $src1), - [{ return N->hasOneUse(); }] ->; + [{ return N->hasOneUse(); }]> { + let GISelPredicateCode = [{ + return MRI.hasOneNonDBGUse(MI.getOperand(0).getReg()); + }]; +} class HasOneUseTernaryOp<SDPatternOperator op> : PatFrag< (ops node:$src0, node:$src1, node:$src2), (op $src0, $src1, $src2), - [{ return N->hasOneUse(); }] ->; + [{ return N->hasOneUse(); }]> { + let GISelPredicateCode = [{ + return MRI.hasOneNonDBGUse(MI.getOperand(0).getReg()); + }]; +} let Properties = [SDNPCommutative, SDNPAssociative] in { def smax_oneuse : HasOneUseBinOp<smax>; |