[llvm] (Draft) [SCEV] forgetValue: support (extractvalue 0, (with-overflow-inst op0, op1)) (PR #98015)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 8 05:05:11 PDT 2024
v01dXYZ wrote:
Yes, I verified with the input you provided in your issue. The program doesn't abort.
<details>
<summary>
Input
</summary>
``` llvm
; ModuleID = '<stdin>'
source_filename = "<stdin>"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"
define void @ham() {
bb:
br label %bb1
bb1: ; preds = %bb3, %bb
%phi = phi i32 [ 0, %bb ], [ %phi4, %bb3 ]
br label %bb5
bb2: ; preds = %bb7
%call = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %add8, i32 -2)
%extractvalue = extractvalue { i32, i1 } %call, 0
br label %bb3
bb3: ; preds = %bb3, %bb2
%phi4 = phi i32 [ %add, %bb3 ], [ 0, %bb2 ]
%add = add i32 %extractvalue, %phi4
br i1 false, label %bb3, label %bb1
bb5: ; preds = %bb7, %bb1
%phi6 = phi i32 [ 1, %bb1 ], [ 0, %bb7 ]
%icmp = icmp eq i32 %phi, 0
br i1 %icmp, label %bb9, label %bb7
bb7: ; preds = %bb5
%load = load i32, ptr addrspace(1) null, align 4
%add8 = add i32 %load, 1
br i1 false, label %bb2, label %bb5
bb9: ; preds = %bb5
ret void
}
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i32, i1 } @llvm.smul.with.overflow.i32(i32, i32) #0
attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
```
``` sh
~/llvm-project/build.indvars_simplify/bin/opt <filename.ll> \
-S -debug --print-before-all \
--passes="loop-unroll<no-partial;peeling;no-runtime;no-upperbound;no-profile-peeling;full-unroll-max=0;O3>"
```
</details>
https://github.com/llvm/llvm-project/pull/98015
More information about the llvm-commits
mailing list