[llvm] d02c3b1 - [Test] Add test showing potential conflict b/w AND elimination and IV widening

Max Kazantsev via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 25 23:50:53 PST 2022


Author: Max Kazantsev
Date: 2022-12-26T14:37:49+07:00
New Revision: d02c3b1358b32e3c38b0001e65434e1d097b28d7

URL: https://github.com/llvm/llvm-project/commit/d02c3b1358b32e3c38b0001e65434e1d097b28d7
DIFF: https://github.com/llvm/llvm-project/commit/d02c3b1358b32e3c38b0001e65434e1d097b28d7.diff

LOG: [Test] Add test showing potential conflict b/w AND elimination and IV widening

Added: 
    llvm/test/Transforms/IndVarSimplify/X86/widening-vs-and-elimination.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/IndVarSimplify/X86/widening-vs-and-elimination.ll b/llvm/test/Transforms/IndVarSimplify/X86/widening-vs-and-elimination.ll
new file mode 100644
index 0000000000000..9b8ef313a3c5e
--- /dev/null
+++ b/llvm/test/Transforms/IndVarSimplify/X86/widening-vs-and-elimination.ll
@@ -0,0 +1,68 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -passes=indvars < %s | FileCheck %s --check-prefixes=WIDENING_ON
+; RUN: opt -S -passes=indvars -indvars-widen-indvars=false < %s | FileCheck %s --check-prefixes=WIDENING_OFF
+
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-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 @test(ptr %p1, ptr %p2) {
+; WIDENING_ON-LABEL: @test(
+; WIDENING_ON-NEXT:  bb:
+; WIDENING_ON-NEXT:    [[VAR:%.*]] = load atomic i32, ptr [[P1:%.*]] unordered, align 8
+; WIDENING_ON-NEXT:    [[VAR1:%.*]] = load atomic i32, ptr [[P2:%.*]] unordered, align 8
+; WIDENING_ON-NEXT:    [[TMP0:%.*]] = zext i32 [[VAR]] to i64
+; WIDENING_ON-NEXT:    br label [[BB2:%.*]]
+; WIDENING_ON:       bb2:
+; WIDENING_ON-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[BB8:%.*]] ], [ [[TMP0]], [[BB:%.*]] ]
+; WIDENING_ON-NEXT:    [[TMP1:%.*]] = add nsw i64 [[INDVARS_IV]], -1
+; WIDENING_ON-NEXT:    [[INDVARS_IV_NEXT]] = add nsw i64 [[INDVARS_IV]], -1
+; WIDENING_ON-NEXT:    [[VAR5:%.*]] = icmp ne i64 [[INDVARS_IV]], 0
+; WIDENING_ON-NEXT:    [[TMP2:%.*]] = zext i32 [[VAR1]] to i64
+; WIDENING_ON-NEXT:    [[VAR6_WIDE:%.*]] = icmp ult i64 [[TMP1]], [[TMP2]]
+; WIDENING_ON-NEXT:    [[VAR7:%.*]] = and i1 [[VAR5]], [[VAR6_WIDE]]
+; WIDENING_ON-NEXT:    br i1 [[VAR7]], label [[BB8]], label [[BB11:%.*]]
+; WIDENING_ON:       bb8:
+; WIDENING_ON-NEXT:    br label [[BB2]]
+; WIDENING_ON:       bb11:
+; WIDENING_ON-NEXT:    ret void
+;
+; WIDENING_OFF-LABEL: @test(
+; WIDENING_OFF-NEXT:  bb:
+; WIDENING_OFF-NEXT:    [[VAR:%.*]] = load atomic i32, ptr [[P1:%.*]] unordered, align 8
+; WIDENING_OFF-NEXT:    [[VAR1:%.*]] = load atomic i32, ptr [[P2:%.*]] unordered, align 8
+; WIDENING_OFF-NEXT:    br label [[BB2:%.*]]
+; WIDENING_OFF:       bb2:
+; WIDENING_OFF-NEXT:    [[VAR3:%.*]] = phi i32 [ [[VAR4:%.*]], [[BB8:%.*]] ], [ [[VAR]], [[BB:%.*]] ]
+; WIDENING_OFF-NEXT:    [[VAR4]] = add i32 [[VAR3]], -1
+; WIDENING_OFF-NEXT:    [[VAR5:%.*]] = icmp ne i32 [[VAR3]], 0
+; WIDENING_OFF-NEXT:    [[VAR6:%.*]] = icmp ult i32 [[VAR4]], [[VAR1]]
+; WIDENING_OFF-NEXT:    [[VAR7:%.*]] = and i1 [[VAR5]], [[VAR6]]
+; WIDENING_OFF-NEXT:    br i1 [[VAR7]], label [[BB8]], label [[BB11:%.*]]
+; WIDENING_OFF:       bb8:
+; WIDENING_OFF-NEXT:    [[VAR9:%.*]] = zext i32 [[VAR4]] to i64
+; WIDENING_OFF-NEXT:    [[VAR10:%.*]] = getelementptr inbounds i32, ptr addrspace(1) poison, i64 [[VAR9]]
+; WIDENING_OFF-NEXT:    br label [[BB2]]
+; WIDENING_OFF:       bb11:
+; WIDENING_OFF-NEXT:    ret void
+;
+bb:
+  %var = load atomic i32, ptr %p1 unordered, align 8
+  %var1 = load atomic i32, ptr %p2 unordered, align 8
+  br label %bb2
+
+bb2:                                              ; preds = %bb8, %bb
+  %var3 = phi i32 [ %var4, %bb8 ], [ %var, %bb ]
+  %var4 = add i32 %var3, -1
+  %var5 = icmp ne i32 %var3, 0
+  %var6 = icmp ult i32 %var4, %var1
+  %var7 = and i1 %var5, %var6
+  br i1 %var7, label %bb8, label %bb11
+
+bb8:                                              ; preds = %bb2
+  %var9 = zext i32 %var4 to i64
+  %var10 = getelementptr inbounds i32, ptr addrspace(1) poison, i64 %var9
+  br label %bb2
+
+bb11:                                             ; preds = %bb2
+  ret void
+}


        


More information about the llvm-commits mailing list