[PATCH] D145350: [PowerPC] Check if the latch block is in the value list for the PHI before get the incoming value.

Esme Yi via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 6 22:07:08 PST 2023


Esme updated this revision to Diff 502924.
Esme added a comment.

Address comment.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D145350

Files:
  llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
  llvm/test/CodeGen/PowerPC/loop-instr-form-non-inc.ll


Index: llvm/test/CodeGen/PowerPC/loop-instr-form-non-inc.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/PowerPC/loop-instr-form-non-inc.ll
@@ -0,0 +1,39 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-linux-gnu \
+; RUN:   -mcpu=pwr9 < %s | FileCheck %s
+
+define dso_local void @test_no_inc(i32 signext %a) local_unnamed_addr nounwind align 2 {
+; CHECK-LABEL: test_no_inc:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    srawi 4, 3, 31
+; CHECK-NEXT:    cmpwi 3, 0
+; CHECK-NEXT:    li 6, 1
+; CHECK-NEXT:    li 7, 0
+; CHECK-NEXT:    andc 4, 3, 4
+; CHECK-NEXT:    addi 5, 4, 1
+; CHECK-NEXT:    .p2align 5
+; CHECK-NEXT:  .LBB0_1: # %for.cond
+; CHECK-NEXT:    #
+; CHECK-NEXT:    add 8, 3, 6
+; CHECK-NEXT:    stb 7, 0(5)
+; CHECK-NEXT:    add 5, 5, 4
+; CHECK-NEXT:    iselgt 6, 8, 6
+; CHECK-NEXT:    b .LBB0_1
+entry:
+  %cmp10 = icmp sgt i32 %a, 0
+  br label %for.cond
+
+for.cond:                                         ; preds = %for.cond.cleanup, %entry
+  %g.0 = phi i32 [ 1, %entry ], [ %g.1.lcssa, %for.cond.cleanup ]
+  br i1 %cmp10, label %for.body.preheader, label %for.cond.cleanup
+
+for.body.preheader:                               ; preds = %for.cond
+  %0 = add i32 %a, %g.0
+  br label %for.cond.cleanup
+
+for.cond.cleanup:                                 ; preds = %for.body.preheader, %for.cond
+  %g.1.lcssa = phi i32 [ %g.0, %for.cond ], [ %0, %for.body.preheader ]
+  %arrayidx5 = getelementptr inbounds i8, ptr null, i32 %g.1.lcssa
+  store i8 0, ptr %arrayidx5, align 1
+  br label %for.cond
+}
Index: llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
+++ llvm/lib/Target/PowerPC/PPCLoopInstrFormPrep.cpp
@@ -1179,6 +1179,8 @@
 
     // Get the incoming value from the loop latch and check if the value has
     // the add form with the required increment.
+    if (CurrentPHINode->getBasicBlockIndex(LatchBB) < 0)
+      continue;
     if (Instruction *I = dyn_cast<Instruction>(
             CurrentPHINode->getIncomingValueForBlock(LatchBB))) {
       Value *StrippedBaseI = I;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D145350.502924.patch
Type: text/x-patch
Size: 2293 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230307/1bf4be6e/attachment.bin>


More information about the llvm-commits mailing list