[PATCH] D146277: add assert to confirm input is valid for pass HardwareLoops

Wang, Xin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 17 02:26:57 PDT 2023


XinWang10 created this revision.
Herald added a subscriber: hiraditya.
Herald added a project: All.
XinWang10 requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

For a function TryConvertLoop in pass HardwareLoops, wrong input arguments will
lead to crash. In line 342, compiler want to get something from 
HWLoopInfo.CountType, which depends on if argument Bitwidth is given, if not, 
will crash.
Add an assert is convenient for me.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D146277

Files:
  llvm/lib/CodeGen/HardwareLoops.cpp
  llvm/test/Transforms/HardwareLoops/input-error.ll


Index: llvm/test/Transforms/HardwareLoops/input-error.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/HardwareLoops/input-error.ll
@@ -0,0 +1,26 @@
+; RUN: not not opt -passes='hardware-loops<force-hardware-loops>' -S %s 2> %t.err
+; RUN: FileCheck --check-prefix=CHECK < %t.err %s
+; RUN: not not opt -passes='hardware-loops<force-hardware-loops;hardware-loop-counter-bitwidth=32>' -S %s 2> %t.err
+; RUN: FileCheck --check-prefix=CHECK-NODECREMENT < %t.err %s
+; RUN: not not opt -passes='hardware-loops<force-hardware-loops;hardware-loop-decrement=1>' -S %s 2> %t.err
+; RUN: FileCheck --check-prefix=CHECK-NOBITWIDTH < %t.err %s
+
+define void @while_lt(i32 %i, i32 %N, ptr nocapture %A) {
+; CHECK: "Need to specify hardware-loop-counter-bitwidth and " "hardware-loop-decrement=1 together!"
+; CHECK-NODECREMENT: "Need to specify hardware-loop-counter-bitwidth and " "hardware-loop-decrement=1 together!"
+; CHECK-NOBITWIDTH: "Need to specify hardware-loop-counter-bitwidth and " "hardware-loop-decrement=1 together!"
+entry:
+  %cmp4 = icmp ult i32 %i, %N
+  br i1 %cmp4, label %while.body, label %while.end
+
+while.body:
+  %i.addr.05 = phi i32 [ %inc, %while.body ], [ %i, %entry ]
+  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %i.addr.05
+  store i32 %i.addr.05, ptr %arrayidx, align 4
+  %inc = add nuw i32 %i.addr.05, 1
+  %exitcond = icmp eq i32 %inc, %N
+  br i1 %exitcond, label %while.end, label %while.body
+
+while.end:
+  ret void
+}
Index: llvm/lib/CodeGen/HardwareLoops.cpp
===================================================================
--- llvm/lib/CodeGen/HardwareLoops.cpp
+++ llvm/lib/CodeGen/HardwareLoops.cpp
@@ -327,6 +327,11 @@
     return false;
   }
 
+  assert(
+      Opts.Bitwidth.has_value() && Opts.Decrement.has_value() &&
+      "Need to specify hardware-loop-counter-bitwidth and "
+      "hardware-loop-decrement=1 together when specify force-hardware-loops!");
+
   // Allow overriding of the counter width and loop decrement value.
   if (Opts.Bitwidth.has_value()) {
     HWLoopInfo.CountType = IntegerType::get(Ctx, Opts.Bitwidth.value());


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146277.506012.patch
Type: text/x-patch
Size: 2160 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230317/c78d8192/attachment.bin>


More information about the llvm-commits mailing list