[PATCH] D124552: CodeGenPrepare: Replace constant PHI arguments with switch condition value
    Sanjay Patel via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Mon May  9 10:35:59 PDT 2022
    
    
  
spatel added inline comments.
================
Comment at: llvm/lib/CodeGen/CodeGenPrepare.cpp:7046
+  for (const SwitchInst::CaseHandle &Case : SI->cases()) {
+    bool CheckedCase = false;
+    ConstantInt *CaseValue = Case.getCaseValue();
----------------
Is CheckedCase only used to save time (because findCaseDest() is potentially expensive)? I'd put an explanatory comment on this declaration to make its purpose more obvious.
================
Comment at: llvm/lib/CodeGen/CodeGenPrepare.cpp:7054-7055
+        for (unsigned I = 0, E = PHI.getNumIncomingValues(); I != E; I++) {
+          if (PHI.getIncomingValue(I) == CaseValue &&
+              PHI.getIncomingBlock(I) == SwitchBB) {
+            // We cannot optimize if there are multiple case labels jumping to
----------------
I'd invert this to "if (!= || !=) continue;" just to reduce the indentation. IIUC, we will do that anyway in the next patch.
================
Comment at: llvm/test/Transforms/CodeGenPrepare/X86/switch-phi-const.ll:67
+  %x2 = phi i32 [ 50, %bb0 ], [ 50, %bb0 ], [ %x1, %case_42 ]
+  %x2.2 = phi i32 [ 51, %bb0 ], [ 51, %bb0 ], [ %x1, %case_42 ]
+  store i32 %x2, i32* @effect, align 4
----------------
We should have another smaller test that does have multiple phis in a block but without multiple cases. That would still be replaced, right?
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124552/new/
https://reviews.llvm.org/D124552
    
    
More information about the llvm-commits
mailing list