[llvm] 5ff35ba - [AMDGPU][GlobalISel] Fix insert point in FoldableFneg combine
    Mirko Brkusanin via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Feb 11 03:12:17 PST 2022
    
    
  
Author: Mirko Brkusanin
Date: 2022-02-11T12:09:40+01:00
New Revision: 5ff35ba8ae3cb2995ee29961b852b18168776d94
URL: https://github.com/llvm/llvm-project/commit/5ff35ba8ae3cb2995ee29961b852b18168776d94
DIFF: https://github.com/llvm/llvm-project/commit/5ff35ba8ae3cb2995ee29961b852b18168776d94.diff
LOG: [AMDGPU][GlobalISel] Fix insert point in FoldableFneg combine
Newly created fneg was built after some of it's uses in some cases.
Now it will be built immediately after instruction whose dst it negates.
Differential Revision: https://reviews.llvm.org/D119459
Added: 
    
Modified: 
    llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp
    llvm/test/CodeGen/AMDGPU/GlobalISel/combine-foldable-fneg.mir
Removed: 
    
################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp
index e79ff9b597c92..c16d8ee51a7af 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUCombinerHelper.cpp
@@ -373,7 +373,8 @@ void AMDGPUCombinerHelper::applyFoldableFneg(MachineInstr &MI,
     replaceRegWith(MRI, Dst, NegatedMatchInfo);
 
     // Recreate non negated value for other uses of old MatchInfoDst
-    Builder.setInstrAndDebugLoc(MI);
+    auto NextInst = ++MatchInfo->getIterator();
+    Builder.setInstrAndDebugLoc(*NextInst);
     Builder.buildFNeg(MatchInfoDst, NegatedMatchInfo, MI.getFlags());
   }
 
diff  --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/combine-foldable-fneg.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/combine-foldable-fneg.mir
index 093cd0d5c73c6..c305727512a15 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/combine-foldable-fneg.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/combine-foldable-fneg.mir
@@ -777,3 +777,31 @@ body:             |
     $vgpr2 = COPY %7:_(s32)
 
 ...
+
+# Check if new fneg is inserted at the appropriate place
+---
+name:            fneg_src_has_multiple_uses
+body:             |
+  bb.0:
+    liveins: $vgpr0, $vgpr1, $vgpr2
+
+    ; CHECK-LABEL: name: fneg_src_has_multiple_uses
+    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
+    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
+    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
+    ; CHECK-NEXT: [[FNEG:%[0-9]+]]:_(s32) = G_FNEG [[COPY1]]
+    ; CHECK-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[COPY]], [[FNEG]]
+    ; CHECK-NEXT: [[FNEG1:%[0-9]+]]:_(s32) = G_FNEG [[FMUL]]
+    ; CHECK-NEXT: [[FMUL1:%[0-9]+]]:_(s32) = G_FMUL [[FNEG1]], [[COPY2]]
+    ; CHECK-NEXT: $vgpr0 = COPY [[FMUL1]](s32)
+    ; CHECK-NEXT: $vgpr1 = COPY [[FMUL]](s32)
+    %0:_(s32) = COPY $vgpr0
+    %1:_(s32) = COPY $vgpr1
+    %2:_(s32) = COPY $vgpr2
+    %3:_(s32) = G_FMUL %0:_, %1:_
+    %4:_(s32) = G_FMUL %3:_, %2:_
+    %5:_(s32) = G_FNEG %3:_
+    $vgpr0 = COPY %4:_(s32)
+    $vgpr1 = COPY %5:_(s32)
+
+...
        
    
    
More information about the llvm-commits
mailing list