[llvm] [PowerPC] Ensure MI peephole knows about instr modified by combineRLWINM() (PR #97134)
Lei Huang via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 28 18:48:13 PDT 2024
https://github.com/lei137 created https://github.com/llvm/llvm-project/pull/97134
Ensure registers used in instructions modified by `combineRLWINM()` are added to list of `RegsToUpdate`.
>From bffa1294e9434dc3cb489325bf5db047558f3493 Mon Sep 17 00:00:00 2001
From: Lei Huang <lei at ca.ibm.com>
Date: Fri, 28 Jun 2024 20:36:19 -0400
Subject: [PATCH 1/2] [PowerPC] Ensure MI peephole knows about instructions
modified by combineRLWINM()
Ensure registers used in instructions modified by `combineRLWINM()` are added
to list of `RegsToUpdate`.
---
llvm/lib/Target/PowerPC/PPCMIPeephole.cpp | 4 +
.../peephole-combineRLWINM-liveness.ll | 177 ++++++++++++++++++
2 files changed, 181 insertions(+)
create mode 100644 llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll
diff --git a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
index 0b515c9f798fe..90c9912807ed6 100644
--- a/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
+++ b/llvm/lib/Target/PowerPC/PPCMIPeephole.cpp
@@ -1291,6 +1291,10 @@ bool PPCMIPeephole::simplifyCode() {
addRegToUpdate(OrigOp1Reg);
if (MI.getOperand(1).isReg())
addRegToUpdate(MI.getOperand(1).getReg());
+ if (ToErase && ToErase->getOperand(1).isReg())
+ for (auto UseReg: ToErase->explicit_uses())
+ if (UseReg.isReg())
+ addRegToUpdate(UseReg.getReg());
++NumRotatesCollapsed;
}
break;
diff --git a/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll b/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll
new file mode 100644
index 0000000000000..6fa9870e45df4
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll
@@ -0,0 +1,177 @@
+; RUN: llc -verify-machineinstrs -mtriple=powerpc-ibm-aix < %s
+; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix < %s
+
+; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
+declare <8 x i16> @llvm.ppc.altivec.vupkhsb(<16 x i8>) #0
+
+define i32 @main(i32 %argc, ptr %argv, i1 %exitcond.not.i, <16 x i8> %0, i8 %1, i128 %2, i128 %3, i8 %4, i8 %5, i8 %6, i8 %7, i8 %8, i8 %9, i16 %10, i1 %cmp9.not.2.i, i1 %cmp9.not.3.i, i1 %cmp9.not.4.i, i1 %cmp9.not.6.i, i1 %cmp9.not.7.i, <4 x i32> %bc128.i, i32 %11, i32 %12, i1 %cmp.not.i.i, i1 %cmp4.not.i.i, i1 %or.cond.i.i, i32 %13, i32 %14, i32 %15, i1 %cmp8.not.i.i, i1 %cmp12.not.i.i, i1 %or.cond.i, i32 %16, i32 %17, i32 %e.sroa.0.0.copyload.lcssa116.i, i32 %18, i32 %add.i9.i84.i, i32 %add.i9.i84100101.i, i32 %19, i32 %add.i5.i80.i, ptr %20, i32 %21, i1 %cmp38.not.i, i32 %conv36.i, i32 %conv36.1.i, i32 %conv36.2.i, i32 %conv36.3.i, ptr %22, i32 %j.198.lcssa.i, i32 %23, i1 %cmp38.not.1.i, i32 %24, i1 %cmp38.not.3.i, i1 %exitcond.not.i48, <16 x i8> %25, <8 x i16> %26, i8 %27, i1 %cmp10.not.i, i8 %28, i8 %29, i8 %30, i8 %31, i8 %32, i8 %33, i8 %34, ptr %35, ptr %arrayidx8.lcssa.i, i1 %cmp10.not.1.i, i1 %cmp10.not.2.i, i1 %cmp10.not.3.i, i1 %cmp10.not.4.i, i1 %cmp10.not.5.i, i1 %cmp10.not.6.i, i1 %cmp10.not.7.i, <4 x i32> %bc130.i31, <8 x i16> %36, <4 x i32> %37, i1 %cmp40.not.i, ptr %38, ptr %arrayidx39.lcssa.i, i32 %conv36.2.i27) #1 {
+entry:
+ %call.i = load volatile i32, ptr %arrayidx39.lcssa.i, align 4
+ %seed.promoted.i = load i32, ptr %38, align 4
+ br label %for.body.i
+
+for.cond.i: ; preds = %lor.lhs.false5.i.i
+ br i1 %exitcond.not.i, label %for.body27.i, label %for.body.i
+
+for.body.i: ; preds = %for.cond.i, %entry
+ %add.i9.i9496.i = phi i32 [ %seed.promoted.i, %entry ], [ %add.i9.i.i, %for.cond.i ]
+ %mul.i.i.i = mul i32 %add.i9.i9496.i, 69607
+ %add.i.i.i4 = or i32 %mul.i.i.i, 54329
+ store i32 %add.i.i.i4, ptr %arrayidx8.lcssa.i, align 16
+ %39 = mul i32 %argc, 1556607735
+ %add.i9.i.i = or i32 %39, 840608209
+ %40 = load <16 x i8>, ptr %35, align 16
+ %41 = tail call <8 x i16> @llvm.ppc.altivec.vupkhsb(<16 x i8> %40)
+ %42 = bitcast <8 x i16> %41 to i128
+ %cmp9.not.i = icmp eq i8 %1, 0
+ %43 = lshr i128 %42, 96
+ %44 = lshr i128 %42, 32
+ %45 = trunc i128 %44 to i16
+ br i1 %cmp9.not.i, label %for.inc.i, label %if.then.i
+
+if.then.i: ; preds = %for.inc.6.i, %for.inc.5.i, %for.inc.4.i, %for.inc.3.i, %for.inc.2.i, %for.inc.1.i, %for.inc.i, %for.body.i
+ %j.093.lcssa.i = phi i32 [ 0, %for.body.i ], [ 1, %for.inc.i ], [ 0, %for.inc.1.i ], [ 0, %for.inc.2.i ], [ 0, %for.inc.3.i ], [ 0, %for.inc.4.i ], [ 0, %for.inc.5.i ], [ 0, %for.inc.6.i ]
+ %.lcssa.i = phi i8 [ 0, %for.body.i ], [ 0, %for.inc.i ], [ %4, %for.inc.1.i ], [ %5, %for.inc.2.i ], [ %6, %for.inc.3.i ], [ %7, %for.inc.4.i ], [ %8, %for.inc.5.i ], [ %9, %for.inc.6.i ]
+ %arrayidx7.lcssa.i = phi ptr [ null, %for.body.i ], [ null, %for.inc.i ], [ null, %for.inc.1.i ], [ null, %for.inc.2.i ], [ null, %for.inc.3.i ], [ null, %for.inc.4.i ], [ %argv, %for.inc.5.i ], [ null, %for.inc.6.i ]
+ %conv6.i = sext i8 %.lcssa.i to i32
+ %call12.i = tail call i32 (ptr, ...) null(ptr null, i32 %j.093.lcssa.i)
+ %46 = load i16, ptr %arrayidx7.lcssa.i, align 2
+ %conv14.i = sext i16 %46 to i32
+ %call16.i = tail call i32 (ptr, ...) null(ptr null, i32 %conv14.i, i32 %conv6.i)
+ unreachable
+
+for.inc.i: ; preds = %for.body.i
+ %47 = trunc i128 %43 to i16
+ %cmp9.not.1.i = icmp eq i16 %47, 0
+ br i1 %cmp9.not.1.i, label %for.inc.1.i, label %if.then.i
+
+for.inc.1.i: ; preds = %for.inc.i
+ br i1 %cmp9.not.2.i, label %for.inc.2.i, label %if.then.i
+
+for.inc.2.i: ; preds = %for.inc.1.i
+ br i1 %cmp9.not.3.i, label %for.inc.3.i, label %if.then.i
+
+for.inc.3.i: ; preds = %for.inc.2.i
+ br i1 %cmp9.not.4.i, label %for.inc.4.i, label %if.then.i
+
+for.inc.4.i: ; preds = %for.inc.3.i
+ %cmp9.not.5.i = icmp eq i16 %45, 0
+ br i1 %cmp9.not.5.i, label %for.inc.5.i, label %if.then.i
+
+for.inc.5.i: ; preds = %for.inc.4.i
+ br i1 %cmp9.not.6.i, label %for.inc.6.i, label %if.then.i
+
+for.inc.6.i: ; preds = %for.inc.5.i
+ br i1 %cmp9.not.7.i, label %for.inc.7.i, label %if.then.i
+
+for.inc.7.i: ; preds = %for.inc.6.i
+ br i1 %or.cond.i.i, label %lor.lhs.false5.i.i, label %verify_equal.exit.i
+
+lor.lhs.false5.i.i: ; preds = %for.inc.7.i
+ br i1 %cmp12.not.i.i, label %for.cond.i, label %verify_equal.exit.i
+
+verify_equal.exit.i: ; preds = %lor.lhs.false5.i.i, %for.inc.7.i
+ %call23.i.i = tail call i32 (ptr, ...) null(ptr null, i32 %e.sroa.0.0.copyload.lcssa116.i, i32 %18, i32 0, i32 0)
+ br label %for.body.i3
+
+for.body27.i: ; preds = %for.inc49.2.i, %for.cond.i
+ store i32 %add.i5.i80.i, ptr %20, align 4
+ br i1 %cmp38.not.i, label %for.inc49.i, label %if.then40.i
+
+if.then40.i: ; preds = %for.inc49.2.i, %for.inc49.1.i, %for.inc49.i, %for.body27.i
+ %conv36.lcssa.i = phi i32 [ %conv36.i, %for.body27.i ], [ %conv36.1.i, %for.inc49.i ], [ %conv36.2.i, %for.inc49.1.i ], [ %conv36.3.i, %for.inc49.2.i ]
+ %arrayidx37.lcssa.i = phi ptr [ null, %for.body27.i ], [ %22, %for.inc49.i ], [ null, %for.inc49.1.i ], [ null, %for.inc49.2.i ]
+ %call42.i = tail call i32 (ptr, ...) null(ptr null, i32 %12)
+ %48 = load i32, ptr %arrayidx37.lcssa.i, align 4
+ %call44.i = tail call i32 (ptr, ...) null(ptr null, i32 %48, i32 %conv36.lcssa.i)
+ unreachable
+
+for.inc49.i: ; preds = %for.body27.i
+ br i1 %cmp38.not.1.i, label %for.inc49.1.i, label %if.then40.i
+
+for.inc49.1.i: ; preds = %for.inc49.i
+ %cmp38.not.2.i = icmp eq i32 %24, %conv36.2.i27
+ br i1 %cmp38.not.2.i, label %for.inc49.2.i, label %if.then40.i
+
+for.inc49.2.i: ; preds = %for.inc49.1.i
+ br i1 %cmp.not.i.i, label %for.body27.i, label %if.then40.i
+
+for.cond.i47: ; preds = %lor.lhs.false5.i.i43
+ br i1 %cmp8.not.i.i, label %for.body28.i, label %for.body.i3
+
+for.body.i3: ; preds = %for.cond.i47, %verify_equal.exit.i
+ store i32 %add.i9.i84100101.i, ptr %argv, align 4
+ store i32 %11, ptr null, align 8
+ %49 = lshr i128 %3, 96
+ %50 = lshr i128 %2, 32
+ %51 = trunc i128 %49 to i32
+ %52 = trunc i128 %50 to i32
+ br i1 %cmp10.not.i, label %for.inc.i22, label %if.then.i19
+
+if.then.i19: ; preds = %for.inc.6.i29, %for.inc.5.i28, %for.inc.4.i27, %for.inc.3.i26, %for.inc.2.i25, %for.inc.1.i24, %for.inc.i22, %for.body.i3
+ %.lcssa.i20 = phi i8 [ %27, %for.body.i3 ], [ %28, %for.inc.i22 ], [ %29, %for.inc.1.i24 ], [ %30, %for.inc.2.i25 ], [ %31, %for.inc.3.i26 ], [ %32, %for.inc.4.i27 ], [ %33, %for.inc.5.i28 ], [ %34, %for.inc.6.i29 ]
+ %conv7.i = sext i8 %.lcssa.i20 to i32
+ %call13.i = tail call i32 (ptr, ...) null(ptr null, i32 %13)
+ %call17.i = tail call i32 (ptr, ...) null(ptr null, i32 %15, i32 %conv7.i)
+ unreachable
+
+for.inc.i22: ; preds = %for.body.i3
+ br i1 %cmp10.not.1.i, label %for.inc.1.i24, label %if.then.i19
+
+for.inc.1.i24: ; preds = %for.inc.i22
+ br i1 %cmp10.not.2.i, label %for.inc.2.i25, label %if.then.i19
+
+for.inc.2.i25: ; preds = %for.inc.1.i24
+ br i1 %cmp10.not.3.i, label %for.inc.3.i26, label %if.then.i19
+
+for.inc.3.i26: ; preds = %for.inc.2.i25
+ br i1 %cmp10.not.4.i, label %for.inc.4.i27, label %if.then.i19
+
+for.inc.4.i27: ; preds = %for.inc.3.i26
+ br i1 %cmp10.not.5.i, label %for.inc.5.i28, label %if.then.i19
+
+for.inc.5.i28: ; preds = %for.inc.4.i27
+ br i1 %cmp38.not.3.i, label %for.inc.6.i29, label %if.then.i19
+
+for.inc.6.i29: ; preds = %for.inc.5.i28
+ br i1 %cmp4.not.i.i, label %for.inc.7.i30, label %if.then.i19
+
+for.inc.7.i30: ; preds = %for.inc.6.i29
+ br i1 %cmp40.not.i, label %lor.lhs.false5.i.i43, label %verify_equal.exit.i38
+
+lor.lhs.false5.i.i43: ; preds = %for.inc.7.i30
+ %cmp8.not.i.i44 = icmp eq i32 0, %52
+ %or.cond.i46 = select i1 %cmp8.not.i.i44, i1 %cmp10.not.7.i, i1 false
+ br i1 %or.cond.i46, label %for.cond.i47, label %verify_equal.exit.i38
+
+verify_equal.exit.i38: ; preds = %lor.lhs.false5.i.i43, %for.inc.7.i30
+ %e.sroa.0.0.copyload.lcssa118.i = phi i32 [ %23, %for.inc.7.i30 ], [ %51, %lor.lhs.false5.i.i43 ]
+ %call23.i.i42 = tail call i32 (ptr, ...) null(ptr null, i32 %e.sroa.0.0.copyload.lcssa118.i, i32 %19, i32 0, i32 0)
+ ret i32 0
+
+for.body28.i: ; preds = %for.inc51.2.i, %for.cond.i47
+ %add.i9.i86102103.i = phi i32 [ 0, %for.cond.i47 ], [ 1, %for.inc51.2.i ]
+ %53 = mul i32 %add.i9.i86102103.i, 1654633953
+ store i32 %53, ptr null, align 4
+ br i1 %exitcond.not.i48, label %for.inc51.i, label %if.then42.i
+
+if.then42.i: ; preds = %for.inc51.2.i, %for.inc51.1.i, %for.inc51.i, %for.body28.i
+ %conv38.lcssa.i = phi i32 [ %14, %for.body28.i ], [ %16, %for.inc51.i ], [ %j.198.lcssa.i, %for.inc51.1.i ], [ %add.i9.i84.i, %for.inc51.2.i ]
+ %call44.i51 = tail call i32 (ptr, ...) null(ptr null, i32 %21)
+ %call46.i = tail call i32 (ptr, ...) null(ptr null, i32 %17, i32 %conv38.lcssa.i)
+ unreachable
+
+for.inc51.i: ; preds = %for.body28.i
+ br i1 %cmp10.not.6.i, label %for.inc51.1.i, label %if.then42.i
+
+for.inc51.1.i: ; preds = %for.inc51.i
+ %conv38.2.i58 = sext i16 %10 to i32
+ %cmp40.not.2.i = icmp eq i32 0, %conv38.2.i58
+ br i1 %cmp40.not.2.i, label %for.inc51.2.i, label %if.then42.i
+
+for.inc51.2.i: ; preds = %for.inc51.1.i
+ br i1 %or.cond.i, label %for.body28.i, label %if.then42.i
+}
+
+attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
+attributes #1 = { "target-features"="+altivec,+bpermd,+extdiv,+isa-v206-instructions,+vsx,-aix-shared-lib-tls-model-opt,-aix-small-local-dynamic-tls,-aix-small-local-exec-tls,-crbits,-crypto,-direct-move,-htm,-isa-v207-instructions,-isa-v30-instructions,-power8-vector,-power9-vector,-privileged,-quadword-atomics,-rop-protect,-spe" }
>From f5c91e5f3553f5b807c7f5f818798e61efa0a249 Mon Sep 17 00:00:00 2001
From: Lei Huang <lei at ca.ibm.com>
Date: Fri, 28 Jun 2024 21:45:39 -0400
Subject: [PATCH 2/2] reduced IR
---
.../peephole-combineRLWINM-liveness.ll | 204 ++++++------------
1 file changed, 69 insertions(+), 135 deletions(-)
diff --git a/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll b/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll
index 6fa9870e45df4..9a9aeeee1fb1a 100644
--- a/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll
+++ b/llvm/test/CodeGen/PowerPC/peephole-combineRLWINM-liveness.ll
@@ -4,173 +4,107 @@
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare <8 x i16> @llvm.ppc.altivec.vupkhsb(<16 x i8>) #0
-define i32 @main(i32 %argc, ptr %argv, i1 %exitcond.not.i, <16 x i8> %0, i8 %1, i128 %2, i128 %3, i8 %4, i8 %5, i8 %6, i8 %7, i8 %8, i8 %9, i16 %10, i1 %cmp9.not.2.i, i1 %cmp9.not.3.i, i1 %cmp9.not.4.i, i1 %cmp9.not.6.i, i1 %cmp9.not.7.i, <4 x i32> %bc128.i, i32 %11, i32 %12, i1 %cmp.not.i.i, i1 %cmp4.not.i.i, i1 %or.cond.i.i, i32 %13, i32 %14, i32 %15, i1 %cmp8.not.i.i, i1 %cmp12.not.i.i, i1 %or.cond.i, i32 %16, i32 %17, i32 %e.sroa.0.0.copyload.lcssa116.i, i32 %18, i32 %add.i9.i84.i, i32 %add.i9.i84100101.i, i32 %19, i32 %add.i5.i80.i, ptr %20, i32 %21, i1 %cmp38.not.i, i32 %conv36.i, i32 %conv36.1.i, i32 %conv36.2.i, i32 %conv36.3.i, ptr %22, i32 %j.198.lcssa.i, i32 %23, i1 %cmp38.not.1.i, i32 %24, i1 %cmp38.not.3.i, i1 %exitcond.not.i48, <16 x i8> %25, <8 x i16> %26, i8 %27, i1 %cmp10.not.i, i8 %28, i8 %29, i8 %30, i8 %31, i8 %32, i8 %33, i8 %34, ptr %35, ptr %arrayidx8.lcssa.i, i1 %cmp10.not.1.i, i1 %cmp10.not.2.i, i1 %cmp10.not.3.i, i1 %cmp10.not.4.i, i1 %cmp10.not.5.i, i1 %cmp10.not.6.i, i1 %cmp10.not.7.i, <4 x i32> %bc130.i31, <8 x i16> %36, <4 x i32> %37, i1 %cmp40.not.i, ptr %38, ptr %arrayidx39.lcssa.i, i32 %conv36.2.i27) #1 {
+define i32 @call_tester(i32 %argc, ptr %argv, i1 %exitcond.not.i, <16 x i8> %0, i8 %1, i128 %2, i128 %3, i16 %4, i1 %cmp9.not.6.i) #1 {
entry:
- %call.i = load volatile i32, ptr %arrayidx39.lcssa.i, align 4
- %seed.promoted.i = load i32, ptr %38, align 4
+ %seed.promoted.i = load i32, ptr null, align 4
br label %for.body.i
-for.cond.i: ; preds = %lor.lhs.false5.i.i
+for.cond.i: ; preds = %for.inc.7.i
br i1 %exitcond.not.i, label %for.body27.i, label %for.body.i
for.body.i: ; preds = %for.cond.i, %entry
- %add.i9.i9496.i = phi i32 [ %seed.promoted.i, %entry ], [ %add.i9.i.i, %for.cond.i ]
+ %add.i9.i9496.i = phi i32 [ %seed.promoted.i, %entry ], [ %5, %for.cond.i ]
%mul.i.i.i = mul i32 %add.i9.i9496.i, 69607
%add.i.i.i4 = or i32 %mul.i.i.i, 54329
- store i32 %add.i.i.i4, ptr %arrayidx8.lcssa.i, align 16
- %39 = mul i32 %argc, 1556607735
- %add.i9.i.i = or i32 %39, 840608209
- %40 = load <16 x i8>, ptr %35, align 16
- %41 = tail call <8 x i16> @llvm.ppc.altivec.vupkhsb(<16 x i8> %40)
- %42 = bitcast <8 x i16> %41 to i128
- %cmp9.not.i = icmp eq i8 %1, 0
- %43 = lshr i128 %42, 96
- %44 = lshr i128 %42, 32
- %45 = trunc i128 %44 to i16
- br i1 %cmp9.not.i, label %for.inc.i, label %if.then.i
-
-if.then.i: ; preds = %for.inc.6.i, %for.inc.5.i, %for.inc.4.i, %for.inc.3.i, %for.inc.2.i, %for.inc.1.i, %for.inc.i, %for.body.i
- %j.093.lcssa.i = phi i32 [ 0, %for.body.i ], [ 1, %for.inc.i ], [ 0, %for.inc.1.i ], [ 0, %for.inc.2.i ], [ 0, %for.inc.3.i ], [ 0, %for.inc.4.i ], [ 0, %for.inc.5.i ], [ 0, %for.inc.6.i ]
- %.lcssa.i = phi i8 [ 0, %for.body.i ], [ 0, %for.inc.i ], [ %4, %for.inc.1.i ], [ %5, %for.inc.2.i ], [ %6, %for.inc.3.i ], [ %7, %for.inc.4.i ], [ %8, %for.inc.5.i ], [ %9, %for.inc.6.i ]
- %arrayidx7.lcssa.i = phi ptr [ null, %for.body.i ], [ null, %for.inc.i ], [ null, %for.inc.1.i ], [ null, %for.inc.2.i ], [ null, %for.inc.3.i ], [ null, %for.inc.4.i ], [ %argv, %for.inc.5.i ], [ null, %for.inc.6.i ]
+ store i32 %add.i.i.i4, ptr %argv, align 16
+ %5 = mul i32 %argc, 1556607735
+ %6 = load <16 x i8>, ptr %argv, align 16
+ %7 = tail call <8 x i16> @llvm.ppc.altivec.vupkhsb(<16 x i8> %6)
+ %8 = bitcast <8 x i16> %7 to i128
+ %9 = lshr i128 %8, 96
+ %10 = lshr i128 %3, 32
+ %11 = trunc i128 %10 to i16
+ br i1 %exitcond.not.i, label %for.inc.i, label %if.then.i
+
+if.then.i: ; preds = %for.inc.5.i, %for.inc.4.i, %for.inc.i, %for.body.i
+ %j.093.lcssa.i = phi i32 [ 0, %for.body.i ], [ 1, %for.inc.i ], [ 0, %for.inc.4.i ], [ 0, %for.inc.5.i ]
+ %.lcssa.i = phi i8 [ 0, %for.body.i ], [ 0, %for.inc.i ], [ 1, %for.inc.4.i ], [ 0, %for.inc.5.i ]
+ %arrayidx7.lcssa.i = phi ptr [ null, %for.body.i ], [ null, %for.inc.i ], [ null, %for.inc.4.i ], [ %argv, %for.inc.5.i ]
%conv6.i = sext i8 %.lcssa.i to i32
%call12.i = tail call i32 (ptr, ...) null(ptr null, i32 %j.093.lcssa.i)
- %46 = load i16, ptr %arrayidx7.lcssa.i, align 2
- %conv14.i = sext i16 %46 to i32
+ %12 = load i16, ptr %arrayidx7.lcssa.i, align 2
+ %conv14.i = sext i16 %12 to i32
%call16.i = tail call i32 (ptr, ...) null(ptr null, i32 %conv14.i, i32 %conv6.i)
unreachable
for.inc.i: ; preds = %for.body.i
- %47 = trunc i128 %43 to i16
- %cmp9.not.1.i = icmp eq i16 %47, 0
- br i1 %cmp9.not.1.i, label %for.inc.1.i, label %if.then.i
+ %13 = trunc i128 %9 to i16
+ %cmp9.not.1.i = icmp eq i16 %13, 0
+ br i1 %cmp9.not.1.i, label %for.inc.4.i, label %if.then.i
-for.inc.1.i: ; preds = %for.inc.i
- br i1 %cmp9.not.2.i, label %for.inc.2.i, label %if.then.i
-
-for.inc.2.i: ; preds = %for.inc.1.i
- br i1 %cmp9.not.3.i, label %for.inc.3.i, label %if.then.i
-
-for.inc.3.i: ; preds = %for.inc.2.i
- br i1 %cmp9.not.4.i, label %for.inc.4.i, label %if.then.i
-
-for.inc.4.i: ; preds = %for.inc.3.i
- %cmp9.not.5.i = icmp eq i16 %45, 0
+for.inc.4.i: ; preds = %for.inc.i
+ %cmp9.not.5.i = icmp eq i16 %11, 0
br i1 %cmp9.not.5.i, label %for.inc.5.i, label %if.then.i
for.inc.5.i: ; preds = %for.inc.4.i
- br i1 %cmp9.not.6.i, label %for.inc.6.i, label %if.then.i
-
-for.inc.6.i: ; preds = %for.inc.5.i
- br i1 %cmp9.not.7.i, label %for.inc.7.i, label %if.then.i
-
-for.inc.7.i: ; preds = %for.inc.6.i
- br i1 %or.cond.i.i, label %lor.lhs.false5.i.i, label %verify_equal.exit.i
-
-lor.lhs.false5.i.i: ; preds = %for.inc.7.i
- br i1 %cmp12.not.i.i, label %for.cond.i, label %verify_equal.exit.i
-
-verify_equal.exit.i: ; preds = %lor.lhs.false5.i.i, %for.inc.7.i
- %call23.i.i = tail call i32 (ptr, ...) null(ptr null, i32 %e.sroa.0.0.copyload.lcssa116.i, i32 %18, i32 0, i32 0)
- br label %for.body.i3
-
-for.body27.i: ; preds = %for.inc49.2.i, %for.cond.i
- store i32 %add.i5.i80.i, ptr %20, align 4
- br i1 %cmp38.not.i, label %for.inc49.i, label %if.then40.i
-
-if.then40.i: ; preds = %for.inc49.2.i, %for.inc49.1.i, %for.inc49.i, %for.body27.i
- %conv36.lcssa.i = phi i32 [ %conv36.i, %for.body27.i ], [ %conv36.1.i, %for.inc49.i ], [ %conv36.2.i, %for.inc49.1.i ], [ %conv36.3.i, %for.inc49.2.i ]
- %arrayidx37.lcssa.i = phi ptr [ null, %for.body27.i ], [ %22, %for.inc49.i ], [ null, %for.inc49.1.i ], [ null, %for.inc49.2.i ]
- %call42.i = tail call i32 (ptr, ...) null(ptr null, i32 %12)
- %48 = load i32, ptr %arrayidx37.lcssa.i, align 4
- %call44.i = tail call i32 (ptr, ...) null(ptr null, i32 %48, i32 %conv36.lcssa.i)
+ br i1 %exitcond.not.i, label %for.inc.7.i, label %if.then.i
+
+for.inc.7.i: ; preds = %for.inc.5.i
+ br i1 %cmp9.not.6.i, label %for.cond.i, label %verify_equal.exit.i
+
+verify_equal.exit.i: ; preds = %for.inc.7.i
+ %14 = lshr i128 %2, 96
+ %15 = lshr i128 %2, 32
+ %16 = trunc i128 %14 to i32
+ %17 = trunc i128 %15 to i32
+ %.mux = select i1 %exitcond.not.i, i8 0, i8 1
+ br i1 %exitcond.not.i, label %if.then.i19, label %for.inc.7.i30
+
+for.body27.i: ; preds = %for.cond.i
+ br i1 %exitcond.not.i, label %for.inc49.1.i, label %if.then40.i
+
+if.then40.i: ; preds = %for.inc49.1.i, %for.body27.i
+ %conv36.lcssa.i = phi i32 [ 1, %for.body27.i ], [ 0, %for.inc49.1.i ]
+ %arrayidx37.lcssa.i = phi ptr [ %argv, %for.body27.i ], [ null, %for.inc49.1.i ]
+ %18 = load i32, ptr %arrayidx37.lcssa.i, align 4
+ %call44.i = tail call i32 (ptr, ...) null(ptr null, i32 %18, i32 %conv36.lcssa.i)
unreachable
-for.inc49.i: ; preds = %for.body27.i
- br i1 %cmp38.not.1.i, label %for.inc49.1.i, label %if.then40.i
-
-for.inc49.1.i: ; preds = %for.inc49.i
- %cmp38.not.2.i = icmp eq i32 %24, %conv36.2.i27
- br i1 %cmp38.not.2.i, label %for.inc49.2.i, label %if.then40.i
-
-for.inc49.2.i: ; preds = %for.inc49.1.i
- br i1 %cmp.not.i.i, label %for.body27.i, label %if.then40.i
-
-for.cond.i47: ; preds = %lor.lhs.false5.i.i43
- br i1 %cmp8.not.i.i, label %for.body28.i, label %for.body.i3
-
-for.body.i3: ; preds = %for.cond.i47, %verify_equal.exit.i
- store i32 %add.i9.i84100101.i, ptr %argv, align 4
- store i32 %11, ptr null, align 8
- %49 = lshr i128 %3, 96
- %50 = lshr i128 %2, 32
- %51 = trunc i128 %49 to i32
- %52 = trunc i128 %50 to i32
- br i1 %cmp10.not.i, label %for.inc.i22, label %if.then.i19
-
-if.then.i19: ; preds = %for.inc.6.i29, %for.inc.5.i28, %for.inc.4.i27, %for.inc.3.i26, %for.inc.2.i25, %for.inc.1.i24, %for.inc.i22, %for.body.i3
- %.lcssa.i20 = phi i8 [ %27, %for.body.i3 ], [ %28, %for.inc.i22 ], [ %29, %for.inc.1.i24 ], [ %30, %for.inc.2.i25 ], [ %31, %for.inc.3.i26 ], [ %32, %for.inc.4.i27 ], [ %33, %for.inc.5.i28 ], [ %34, %for.inc.6.i29 ]
- %conv7.i = sext i8 %.lcssa.i20 to i32
- %call13.i = tail call i32 (ptr, ...) null(ptr null, i32 %13)
- %call17.i = tail call i32 (ptr, ...) null(ptr null, i32 %15, i32 %conv7.i)
- unreachable
+for.inc49.1.i: ; preds = %for.body27.i
+ br label %if.then40.i
-for.inc.i22: ; preds = %for.body.i3
- br i1 %cmp10.not.1.i, label %for.inc.1.i24, label %if.then.i19
-
-for.inc.1.i24: ; preds = %for.inc.i22
- br i1 %cmp10.not.2.i, label %for.inc.2.i25, label %if.then.i19
-
-for.inc.2.i25: ; preds = %for.inc.1.i24
- br i1 %cmp10.not.3.i, label %for.inc.3.i26, label %if.then.i19
-
-for.inc.3.i26: ; preds = %for.inc.2.i25
- br i1 %cmp10.not.4.i, label %for.inc.4.i27, label %if.then.i19
-
-for.inc.4.i27: ; preds = %for.inc.3.i26
- br i1 %cmp10.not.5.i, label %for.inc.5.i28, label %if.then.i19
-
-for.inc.5.i28: ; preds = %for.inc.4.i27
- br i1 %cmp38.not.3.i, label %for.inc.6.i29, label %if.then.i19
-
-for.inc.6.i29: ; preds = %for.inc.5.i28
- br i1 %cmp4.not.i.i, label %for.inc.7.i30, label %if.then.i19
+if.then.i19: ; preds = %verify_equal.exit.i
+ %conv7.i = sext i8 %.mux to i32
+ %call17.i = tail call i32 (ptr, ...) null(ptr null, i32 0, i32 %conv7.i)
+ unreachable
-for.inc.7.i30: ; preds = %for.inc.6.i29
- br i1 %cmp40.not.i, label %lor.lhs.false5.i.i43, label %verify_equal.exit.i38
+for.inc.7.i30: ; preds = %verify_equal.exit.i
+ br i1 %exitcond.not.i, label %lor.lhs.false5.i.i43, label %verify_equal.exit.i38
lor.lhs.false5.i.i43: ; preds = %for.inc.7.i30
- %cmp8.not.i.i44 = icmp eq i32 0, %52
- %or.cond.i46 = select i1 %cmp8.not.i.i44, i1 %cmp10.not.7.i, i1 false
- br i1 %or.cond.i46, label %for.cond.i47, label %verify_equal.exit.i38
+ %cmp8.not.i.i44 = icmp eq i32 0, %17
+ br i1 %cmp8.not.i.i44, label %for.body28.i, label %verify_equal.exit.i38
verify_equal.exit.i38: ; preds = %lor.lhs.false5.i.i43, %for.inc.7.i30
- %e.sroa.0.0.copyload.lcssa118.i = phi i32 [ %23, %for.inc.7.i30 ], [ %51, %lor.lhs.false5.i.i43 ]
- %call23.i.i42 = tail call i32 (ptr, ...) null(ptr null, i32 %e.sroa.0.0.copyload.lcssa118.i, i32 %19, i32 0, i32 0)
+ %e.sroa.0.0.copyload.lcssa118.i = phi i32 [ 0, %for.inc.7.i30 ], [ %16, %lor.lhs.false5.i.i43 ]
+ %call23.i.i42 = tail call i32 (ptr, ...) null(ptr null, i32 %e.sroa.0.0.copyload.lcssa118.i, i32 0, i32 0, i32 0)
ret i32 0
-for.body28.i: ; preds = %for.inc51.2.i, %for.cond.i47
- %add.i9.i86102103.i = phi i32 [ 0, %for.cond.i47 ], [ 1, %for.inc51.2.i ]
- %53 = mul i32 %add.i9.i86102103.i, 1654633953
- store i32 %53, ptr null, align 4
- br i1 %exitcond.not.i48, label %for.inc51.i, label %if.then42.i
+for.body28.i: ; preds = %for.inc51.1.i, %lor.lhs.false5.i.i43
+ %add.i9.i86102103.i = phi i32 [ 0, %lor.lhs.false5.i.i43 ], [ 1, %for.inc51.1.i ]
+ %19 = mul i32 %add.i9.i86102103.i, 1654633953
+ store i32 %19, ptr null, align 4
+ br i1 %exitcond.not.i, label %for.inc51.1.i, label %if.then42.i
-if.then42.i: ; preds = %for.inc51.2.i, %for.inc51.1.i, %for.inc51.i, %for.body28.i
- %conv38.lcssa.i = phi i32 [ %14, %for.body28.i ], [ %16, %for.inc51.i ], [ %j.198.lcssa.i, %for.inc51.1.i ], [ %add.i9.i84.i, %for.inc51.2.i ]
- %call44.i51 = tail call i32 (ptr, ...) null(ptr null, i32 %21)
- %call46.i = tail call i32 (ptr, ...) null(ptr null, i32 %17, i32 %conv38.lcssa.i)
+if.then42.i: ; preds = %for.inc51.1.i, %for.body28.i
+ %conv38.lcssa.i = phi i32 [ 1, %for.body28.i ], [ 0, %for.inc51.1.i ]
+ %call46.i = tail call i32 (ptr, ...) null(ptr null, i32 0, i32 %conv38.lcssa.i)
unreachable
-for.inc51.i: ; preds = %for.body28.i
- br i1 %cmp10.not.6.i, label %for.inc51.1.i, label %if.then42.i
-
-for.inc51.1.i: ; preds = %for.inc51.i
- %conv38.2.i58 = sext i16 %10 to i32
+for.inc51.1.i: ; preds = %for.body28.i
+ %conv38.2.i58 = sext i16 %4 to i32
%cmp40.not.2.i = icmp eq i32 0, %conv38.2.i58
- br i1 %cmp40.not.2.i, label %for.inc51.2.i, label %if.then42.i
-
-for.inc51.2.i: ; preds = %for.inc51.1.i
- br i1 %or.cond.i, label %for.body28.i, label %if.then42.i
+ br i1 %cmp40.not.2.i, label %for.body28.i, label %if.then42.i
}
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
More information about the llvm-commits
mailing list