[PATCH] D146702: [MergeICmps] Attach metadata to new created loads

Allen zhong via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 24 20:47:35 PDT 2023


Allen added inline comments.


================
Comment at: llvm/lib/Transforms/Scalar/MergeICmps.cpp:646
+    LoadInst *const RhsLoad =
         Builder.CreateLoad(FirstCmp.Rhs().LoadI->getType(), Rhs);
+    // Copy metadata
----------------
nikic wrote:
> Maybe it would be better to clone the instructions, similar to the GEPs above?
Thanks for your suggestion. 
I tried with following change, and find the case  **Transforms/MergeICmps/X86/entry-block-shuffled.ll** will fail.
this is because we only clone the load instrunction itself, and its PointerOperand will be deleted with following **DeleteDeadBlocks(DeadBlocks, &DTU)** in function BCECmpChain::simplify, then **%4 = load i32, ptr %first.i, align 4** will become  invalid instruction **%4 = load i32, ptr poison, align 4**. Did I miss something ?
```
@@ -639,10 +640,9 @@ static BasicBlock *mergeComparisons(ArrayRef<BCECmpBlock> Comparisons,
 
   if (Comparisons.size() == 1) {
     LLVM_DEBUG(dbgs() << "Only one comparison, updating branches\n");
-    Value *const LhsLoad =
-        Builder.CreateLoad(FirstCmp.Lhs().LoadI->getType(), Lhs);
-    Value *const RhsLoad =
-        Builder.CreateLoad(FirstCmp.Rhs().LoadI->getType(), Rhs);
+    Instruction *const LhsLoad = Builder.Insert(FirstCmp.Lhs().LoadI->clone());
+    Instruction *const RhsLoad = Builder.Insert(FirstCmp.Rhs().LoadI->clone());
```


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146702/new/

https://reviews.llvm.org/D146702



More information about the llvm-commits mailing list