llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang @llvm/pr-subscribers-backend-systemz Author: Nikita Popov (nikic) <details> <summary>Changes</summary> Infer nuw from nusw and nneg. This is the constant expression variant of https://github.com/llvm/llvm-project/pull/111144. Proof: https://alive2.llvm.org/ce/z/ihztLy --- Patch is 187.43 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/119214.diff 82 Files Affected: - (modified) clang/test/CodeGen/RISCV/riscv-inline-asm.c (+2-2) - (modified) clang/test/CodeGenCXX/auto-var-init.cpp (+2-2) - (modified) llvm/lib/Analysis/ConstantFolding.cpp (+4-1) - (modified) llvm/test/Other/constant-fold-gep.ll (+8-8) - (modified) llvm/test/Other/optimize-inrange-gep.ll (+1-1) - (modified) llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression.ll (+3-3) - (modified) llvm/test/Transforms/GVN/PRE/load-pre-licm.ll (+1-1) - (modified) llvm/test/Transforms/GVN/PRE/phi-translate-2.ll (+3-3) - (modified) llvm/test/Transforms/IndVarSimplify/eliminate-exit-no-dl.ll (+1-1) - (modified) llvm/test/Transforms/IndVarSimplify/floating-point-small-iv.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/addrspacecast.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/align-addr.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/binop-select-cast-of-select-cond.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/canonicalize-gep-constglob.ll (+6-6) - (modified) llvm/test/Transforms/InstCombine/constant-fold-address-space-pointer.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/constant-fold-gep.ll (+18-18) - (modified) llvm/test/Transforms/InstCombine/fmul.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/force-opaque-ptr.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/fortify-folding.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/freeze-phi.ll (+7-7) - (modified) llvm/test/Transforms/InstCombine/gep-custom-dl.ll (+3-3) - (modified) llvm/test/Transforms/InstCombine/getelementptr.ll (+12-12) - (modified) llvm/test/Transforms/InstCombine/hoist-xor-by-constant-from-xor-by-value.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/memchr-2.ll (+5-5) - (modified) llvm/test/Transforms/InstCombine/memchr-4.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/memchr-6.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/memchr-7.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/memchr-8.ll (+3-3) - (modified) llvm/test/Transforms/InstCombine/memchr-9.ll (+18-18) - (modified) llvm/test/Transforms/InstCombine/memchr.ll (+6-6) - (modified) llvm/test/Transforms/InstCombine/memcmp-8.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/memcpy-from-global.ll (+4-4) - (modified) llvm/test/Transforms/InstCombine/memrchr-3.ll (+10-10) - (modified) llvm/test/Transforms/InstCombine/memrchr-4.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/merging-multiple-stores-into-successor.ll (+3-3) - (modified) llvm/test/Transforms/InstCombine/objsize.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/pr25342.ll (+5-5) - (modified) llvm/test/Transforms/InstCombine/pr33453.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/pr38984-inseltpoison.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/pr38984.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/ptr-replace-alloca.ll (+5-5) - (modified) llvm/test/Transforms/InstCombine/rem.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/select-and-or.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/simplify-libcalls-i16.ll (+30-17) - (modified) llvm/test/Transforms/InstCombine/simplify-libcalls.ll (+30-17) - (modified) llvm/test/Transforms/InstCombine/stpcpy-1.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/stpcpy_chk-1.ll (+5-5) - (modified) llvm/test/Transforms/InstCombine/stpncpy-1.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/str-int-2.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/str-int-3.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/str-int-4.ll (+20-20) - (modified) llvm/test/Transforms/InstCombine/str-int-5.ll (+25-25) - (modified) llvm/test/Transforms/InstCombine/str-int.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/strcall-bad-sig.ll (+5-5) - (modified) llvm/test/Transforms/InstCombine/strcall-no-nul.ll (+10-10) - (modified) llvm/test/Transforms/InstCombine/strchr-1.ll (+3-3) - (modified) llvm/test/Transforms/InstCombine/strchr-3.ll (+6-6) - (modified) llvm/test/Transforms/InstCombine/strcmp-4.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/strlcpy-1.ll (+2-2) - (modified) llvm/test/Transforms/InstCombine/strlen-1.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/strlen-6.ll (+9-9) - (modified) llvm/test/Transforms/InstCombine/strpbrk-1.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/strrchr-1.ll (+3-3) - (modified) llvm/test/Transforms/InstCombine/strrchr-3.ll (+4-4) - (modified) llvm/test/Transforms/InstCombine/strstr-1.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/vec_demanded_elts-inseltpoison.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/vec_demanded_elts.ll (+1-1) - (modified) llvm/test/Transforms/InstCombine/wcslen-1.ll (+2-2) - (modified) llvm/test/Transforms/InstSimplify/ConstProp/gep-constanfolding-error.ll (+1-1) - (modified) llvm/test/Transforms/InstSimplify/ConstProp/gep.ll (+2-2) - (modified) llvm/test/Transforms/InstSimplify/ConstProp/icmp-global.ll (+3-3) - (modified) llvm/test/Transforms/InstSimplify/compare.ll (+1-1) - (modified) llvm/test/Transforms/InstSimplify/past-the-end.ll (+2-2) - (modified) llvm/test/Transforms/InstSimplify/simplify-nested-bitcast.ll (+1-1) - (modified) llvm/test/Transforms/LoopVectorize/X86/pr42674.ll (+1-1) - (modified) llvm/test/Transforms/NewGVN/loadforward.ll (+1-1) - (modified) llvm/test/Transforms/PhaseOrdering/SystemZ/sub-xor.ll (+24-24) - (modified) llvm/test/Transforms/PhaseOrdering/X86/excessive-unrolling.ll (+84-84) - (modified) llvm/test/Transforms/SCCP/2009-09-24-byval-ptr.ll (+1-1) - (modified) llvm/test/Transforms/SCCP/apint-bigint2.ll (+2-2) - (modified) llvm/test/Transforms/SLPVectorizer/AArch64/gather-cost.ll (+4-4) - (modified) llvm/test/Transforms/SLPVectorizer/X86/pr47623.ll (+10-10) ``````````diff diff --git a/clang/test/CodeGen/RISCV/riscv-inline-asm.c b/clang/test/CodeGen/RISCV/riscv-inline-asm.c index de90e513ea1ff1..9da306807ed0dc 100644 --- a/clang/test/CodeGen/RISCV/riscv-inline-asm.c +++ b/clang/test/CodeGen/RISCV/riscv-inline-asm.c @@ -90,9 +90,9 @@ extern int var, arr[2][2]; struct Pair { int a, b; } pair; // CHECK-LABEL: test_s( -// CHECK: call void asm sideeffect "// $0 $1 $2", "s,s,s"(ptr nonnull @var, ptr nonnull getelementptr inbounds (i8, ptr @arr, {{.*}}), ptr nonnull @test_s) +// CHECK: call void asm sideeffect "// $0 $1 $2", "s,s,s"(ptr nonnull @var, ptr nonnull getelementptr inbounds nuw (i8, ptr @arr, {{.*}}), ptr nonnull @test_s) // CHECK: call void asm sideeffect "// $0", "s"(ptr nonnull getelementptr inbounds nuw (i8, ptr @pair, {{.*}})) -// CHECK: call void asm sideeffect "// $0 $1 $2", "S,S,S"(ptr nonnull @var, ptr nonnull getelementptr inbounds (i8, ptr @arr, {{.*}}), ptr nonnull @test_s) +// CHECK: call void asm sideeffect "// $0 $1 $2", "S,S,S"(ptr nonnull @var, ptr nonnull getelementptr inbounds nuw (i8, ptr @arr, {{.*}}), ptr nonnull @test_s) void test_s(void) { asm("// %0 %1 %2" :: "s"(&var), "s"(&arr[1][1]), "s"(test_s)); asm("// %0" :: "s"(&pair.b)); diff --git a/clang/test/CodeGenCXX/auto-var-init.cpp b/clang/test/CodeGenCXX/auto-var-init.cpp index cf92ad62d72844..94386e44573b5f 100644 --- a/clang/test/CodeGenCXX/auto-var-init.cpp +++ b/clang/test/CodeGenCXX/auto-var-init.cpp @@ -1338,7 +1338,7 @@ TEST_UNINIT(base, base); // PATTERN-O0: call void @llvm.memcpy{{.*}} @__const.test_base_uninit.uninit{{.+}}), !annotation [[AUTO_INIT]] // ZERO-LABEL: @test_base_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0,{{.+}}), !annotation [[AUTO_INIT]] -// ZERO-O1: store ptr getelementptr inbounds inrange(-16, 16) (i8, ptr @_ZTV4base, i64 16), {{.*}}, align 8 +// ZERO-O1: store ptr getelementptr inbounds nuw inrange(-16, 16) (i8, ptr @_ZTV4base, i64 16), {{.*}}, align 8 // ZERO-O1-NOT: !annotation TEST_BRACES(base, base); @@ -1359,7 +1359,7 @@ TEST_UNINIT(derived, derived); // ZERO-LABEL: @test_derived_uninit() // ZERO-O0: call void @llvm.memset{{.*}}, i8 0, {{.+}}), !annotation [[AUTO_INIT]] // ZERO-O1: store i64 0, {{.*}} align 8, !annotation [[AUTO_INIT]] -// ZERO-O1: store ptr getelementptr inbounds inrange(-16, 16) (i8, ptr @_ZTV7derived, i64 16), {{.*}} align 8 +// ZERO-O1: store ptr getelementptr inbounds nuw inrange(-16, 16) (i8, ptr @_ZTV7derived, i64 16), {{.*}} align 8 TEST_BRACES(derived, derived); // CHECK-LABEL: @test_derived_braces() diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index efbccee76f2c51..27f682d2400f93 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -952,7 +952,6 @@ Constant *SymbolicallyEvaluateGEP(const GEPOperator *GEP, } // Try to infer inbounds for GEPs of globals. - // TODO(gep_nowrap): Also infer nuw flag. if (!NW.isInBounds() && Offset.isNonNegative()) { bool CanBeNull, CanBeFreed; uint64_t DerefBytes = @@ -961,6 +960,10 @@ Constant *SymbolicallyEvaluateGEP(const GEPOperator *GEP, NW |= GEPNoWrapFlags::inBounds(); } + // nusw + nneg -> nuw + if (NW.hasNoUnsignedSignedWrap() && Offset.isNonNegative()) + NW |= GEPNoWrapFlags::noUnsignedWrap(); + // Otherwise canonicalize this to a single ptradd. LLVMContext &Ctx = Ptr->getContext(); return ConstantExpr::getGetElementPtr(Type::getInt8Ty(Ctx), Ptr, diff --git a/llvm/test/Other/constant-fold-gep.ll b/llvm/test/Other/constant-fold-gep.ll index e0d535e6952730..a4c55c62840a6c 100644 --- a/llvm/test/Other/constant-fold-gep.ll +++ b/llvm/test/Other/constant-fold-gep.ll @@ -106,10 +106,10 @@ ; PLAIN: @Y = global ptr getelementptr inbounds ([3 x { i32, i32 }], ptr getelementptr inbounds ([3 x { i32, i32 }], ptr @ext, i64 1), i64 1) ; PLAIN: @Z = global ptr getelementptr inbounds (i32, ptr getelementptr inbounds ([3 x { i32, i32 }], ptr @ext, i64 0, i64 1, i32 0), i64 1) -; OPT: @Y = local_unnamed_addr global ptr getelementptr inbounds (i8, ptr @ext, i64 48) -; OPT: @Z = local_unnamed_addr global ptr getelementptr inbounds (i8, ptr @ext, i64 12) -; TO: @Y = local_unnamed_addr global ptr getelementptr inbounds (i8, ptr @ext, i64 48) -; TO: @Z = local_unnamed_addr global ptr getelementptr inbounds (i8, ptr @ext, i64 12) +; OPT: @Y = local_unnamed_addr global ptr getelementptr inbounds nuw (i8, ptr @ext, i64 48) +; OPT: @Z = local_unnamed_addr global ptr getelementptr inbounds nuw (i8, ptr @ext, i64 12) +; TO: @Y = local_unnamed_addr global ptr getelementptr inbounds nuw (i8, ptr @ext, i64 48) +; TO: @Z = local_unnamed_addr global ptr getelementptr inbounds nuw (i8, ptr @ext, i64 12) @ext = external global [3 x { i32, i32 }] @Y = global ptr getelementptr inbounds ([3 x { i32, i32 }], ptr getelementptr inbounds ([3 x { i32, i32 }], ptr @ext, i64 1), i64 1) @@ -433,10 +433,10 @@ define ptr @fO() nounwind { ; PLAIN: ret ptr %t ; PLAIN: } ; OPT: define ptr @fZ() local_unnamed_addr #0 { -; OPT: ret ptr getelementptr inbounds (i8, ptr @ext, i64 12) +; OPT: ret ptr getelementptr inbounds nuw (i8, ptr @ext, i64 12) ; OPT: } ; TO: define ptr @fZ() local_unnamed_addr #0 { -; TO: ret ptr getelementptr inbounds (i8, ptr @ext, i64 12) +; TO: ret ptr getelementptr inbounds nuw (i8, ptr @ext, i64 12) ; TO: } ; SCEV: Classifying expressions for: @fZ ; SCEV: %t = bitcast ptr getelementptr inbounds (i32, ptr getelementptr inbounds ([3 x { i32, i32 }], ptr @ext, i64 0, i64 1, i32 0), i64 1) to ptr @@ -457,14 +457,14 @@ define ptr @different_addrspace() nounwind noinline { %p = getelementptr inbounds i8, ptr addrspacecast (ptr addrspace(12) @p12 to ptr), i32 2 ret ptr %p -; OPT: ret ptr getelementptr inbounds (i8, ptr addrspacecast (ptr addrspace(12) @p12 to ptr), i64 2) +; OPT: ret ptr getelementptr inbounds nuw (i8, ptr addrspacecast (ptr addrspace(12) @p12 to ptr), i64 2) } define ptr @same_addrspace() nounwind noinline { ; OPT: same_addrspace %p = getelementptr inbounds i8, ptr @p0, i32 2 ret ptr %p -; OPT: ret ptr getelementptr inbounds (i8, ptr @p0, i64 2) +; OPT: ret ptr getelementptr inbounds nuw (i8, ptr @p0, i64 2) } @gv1 = internal global i32 1 diff --git a/llvm/test/Other/optimize-inrange-gep.ll b/llvm/test/Other/optimize-inrange-gep.ll index 66cf7f2c17f98e..6dea44005353c6 100644 --- a/llvm/test/Other/optimize-inrange-gep.ll +++ b/llvm/test/Other/optimize-inrange-gep.ll @@ -20,7 +20,7 @@ define void @foo(ptr %p) { ; ; CHECK-LABEL: define void @foo( ; CHECK-SAME: ptr nocapture writeonly initializes((0, 8)) [[P:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] { -; CHECK-NEXT: store ptr getelementptr inbounds inrange(-24, 0) (i8, ptr @vtable, i64 24), ptr [[P]], align 8 +; CHECK-NEXT: store ptr getelementptr inbounds nuw inrange(-24, 0) (i8, ptr @vtable, i64 24), ptr [[P]], align 8 ; CHECK-NEXT: ret void ; store ptr getelementptr inrange(-24, 0) ({ [3 x ptr], [3 x ptr] }, ptr @vtable, i32 0, i32 0, i32 3), ptr %p diff --git a/llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression.ll b/llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression.ll index 0c24169d02c2c5..0e0854c8807c2e 100644 --- a/llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression.ll +++ b/llvm/test/Transforms/FunctionSpecialization/function-specialization-constant-expression.ll @@ -30,13 +30,13 @@ define internal i64 @zoo(i1 %flag) { ; CHECK-NEXT: entry: ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[PLUS:%.*]], label [[MINUS:%.*]] ; CHECK: plus: -; CHECK-NEXT: [[TMP0:%.*]] = call i64 @func2.specialized.2(ptr getelementptr inbounds (i8, ptr @Global, i64 8)) +; CHECK-NEXT: [[TMP0:%.*]] = call i64 @func2.specialized.2(ptr getelementptr inbounds nuw (i8, ptr @Global, i64 8)) ; CHECK-NEXT: br label [[MERGE:%.*]] ; CHECK: minus: -; CHECK-NEXT: [[TMP1:%.*]] = call i64 @func2.specialized.1(ptr getelementptr inbounds (i8, ptr @Global, i64 16)) +; CHECK-NEXT: [[TMP1:%.*]] = call i64 @func2.specialized.1(ptr getelementptr inbounds nuw (i8, ptr @Global, i64 16)) ; CHECK-NEXT: br label [[MERGE]] ; CHECK: merge: -; CHECK-NEXT: [[TMP2:%.*]] = phi i64 [ ptrtoint (ptr getelementptr inbounds (i8, ptr @Global, i64 8) to i64), [[PLUS]] ], [ ptrtoint (ptr getelementptr inbounds (i8, ptr @Global, i64 16) to i64), [[MINUS]] ] +; CHECK-NEXT: [[TMP2:%.*]] = phi i64 [ ptrtoint (ptr getelementptr inbounds nuw (i8, ptr @Global, i64 8) to i64), [[PLUS]] ], [ ptrtoint (ptr getelementptr inbounds nuw (i8, ptr @Global, i64 16) to i64), [[MINUS]] ] ; CHECK-NEXT: ret i64 [[TMP2]] ; entry: diff --git a/llvm/test/Transforms/GVN/PRE/load-pre-licm.ll b/llvm/test/Transforms/GVN/PRE/load-pre-licm.ll index 6a05d5b17dde86..7028edb4732bdd 100644 --- a/llvm/test/Transforms/GVN/PRE/load-pre-licm.ll +++ b/llvm/test/Transforms/GVN/PRE/load-pre-licm.ll @@ -8,7 +8,7 @@ target triple = "i386-apple-darwin11.0.0" define void @Bubble() nounwind noinline { ; CHECK-LABEL: @Bubble( ; CHECK-NEXT: entry: -; CHECK-NEXT: [[TMP7_PRE:%.*]] = load i32, ptr getelementptr inbounds (i8, ptr @sortlist, i32 4), align 4 +; CHECK-NEXT: [[TMP7_PRE:%.*]] = load i32, ptr getelementptr inbounds nuw (i8, ptr @sortlist, i32 4), align 4 ; CHECK-NEXT: br label [[WHILE_BODY5:%.*]] ; CHECK: while.body5: ; CHECK-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP7_PRE]], [[ENTRY:%.*]] ], [ [[TMP71:%.*]], [[IF_END:%.*]] ] diff --git a/llvm/test/Transforms/GVN/PRE/phi-translate-2.ll b/llvm/test/Transforms/GVN/PRE/phi-translate-2.ll index 39790f4cddbb7a..a38d3e50a61218 100644 --- a/llvm/test/Transforms/GVN/PRE/phi-translate-2.ll +++ b/llvm/test/Transforms/GVN/PRE/phi-translate-2.ll @@ -63,8 +63,8 @@ define void @test2(i64 %i) { ; CHECK: if.then: ; CHECK-NEXT: [[CALL:%.*]] = tail call i64 (...) @goo() ; CHECK-NEXT: store i64 [[CALL]], ptr @g2, align 8 -; CHECK-NEXT: [[T2_PRE:%.*]] = load i64, ptr getelementptr inbounds (i8, ptr @a, i64 24), align 8 -; CHECK-NEXT: [[T3_PRE:%.*]] = load i64, ptr getelementptr inbounds (i8, ptr @b, i64 24), align 8 +; CHECK-NEXT: [[T2_PRE:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @a, i64 24), align 8 +; CHECK-NEXT: [[T3_PRE:%.*]] = load i64, ptr getelementptr inbounds nuw (i8, ptr @b, i64 24), align 8 ; CHECK-NEXT: [[DOTPRE:%.*]] = mul nsw i64 [[T3_PRE]], [[T2_PRE]] ; CHECK-NEXT: br label [[IF_END]] ; CHECK: if.end: @@ -272,7 +272,7 @@ define void @test6(ptr %ptr, i1 %arg) { ; CHECK-NEXT: br label [[IF_END]] ; CHECK: if.end: ; CHECK-NEXT: [[TMP2]] = phi i32 [ [[TMP0]], [[IF_THEN]] ], [ [[TMP1]], [[WHILE]] ] -; CHECK-NEXT: br i1 %arg, label [[WHILE_END:%.*]], label [[WHILE]] +; CHECK-NEXT: br i1 [[ARG:%.*]], label [[WHILE_END:%.*]], label [[WHILE]] ; CHECK: while.end: ; CHECK-NEXT: ret void ; diff --git a/llvm/test/Transforms/IndVarSimplify/eliminate-exit-no-dl.ll b/llvm/test/Transforms/IndVarSimplify/eliminate-exit-no-dl.ll index a3c4002626a705..3f75d0c9880f85 100644 --- a/llvm/test/Transforms/IndVarSimplify/eliminate-exit-no-dl.ll +++ b/llvm/test/Transforms/IndVarSimplify/eliminate-exit-no-dl.ll @@ -14,7 +14,7 @@ define void @foo() { ; CHECK-NEXT: bb: ; CHECK-NEXT: br label [[BB3:%.*]] ; CHECK: bb3: -; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr getelementptr inbounds (i8, ptr @global, i64 1), align 1 +; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr getelementptr inbounds nuw (i8, ptr @global, i64 1), align 1 ; CHECK-NEXT: br i1 false, label [[BB7:%.*]], label [[BB11:%.*]] ; CHECK: bb7: ; CHECK-NEXT: [[TMP8:%.*]] = zext i8 [[TMP6]] to i64 diff --git a/llvm/test/Transforms/IndVarSimplify/floating-point-small-iv.ll b/llvm/test/Transforms/IndVarSimplify/floating-point-small-iv.ll index bebd314f7375ab..90d84eb5a1add5 100644 --- a/llvm/test/Transforms/IndVarSimplify/floating-point-small-iv.ll +++ b/llvm/test/Transforms/IndVarSimplify/floating-point-small-iv.ll @@ -357,7 +357,7 @@ define void @uitofp_fptoui_range_with_negative() { ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[FOR_BODY:%.*]] ; CHECK: for.body: -; CHECK-NEXT: store i32 100, ptr getelementptr inbounds (i8, ptr @array, i64 400), align 4 +; CHECK-NEXT: store i32 100, ptr getelementptr inbounds nuw (i8, ptr @array, i64 400), align 4 ; CHECK-NEXT: br i1 false, label [[FOR_BODY]], label [[CLEANUP:%.*]] ; CHECK: cleanup: ; CHECK-NEXT: ret void @@ -418,7 +418,7 @@ define void @uitofp_fptosi_range_with_negative () { ; CHECK-NEXT: entry: ; CHECK-NEXT: br label [[FOR_BODY:%.*]] ; CHECK: for.body: -; CHECK-NEXT: store i32 100, ptr getelementptr inbounds (i8, ptr @array, i64 400), align 4 +; CHECK-NEXT: store i32 100, ptr getelementptr inbounds nuw (i8, ptr @array, i64 400), align 4 ; CHECK-NEXT: br i1 false, label [[FOR_BODY]], label [[CLEANUP:%.*]] ; CHECK: cleanup: ; CHECK-NEXT: ret void diff --git a/llvm/test/Transforms/InstCombine/addrspacecast.ll b/llvm/test/Transforms/InstCombine/addrspacecast.ll index 35a1066a6b31c2..00df5450640695 100644 --- a/llvm/test/Transforms/InstCombine/addrspacecast.ll +++ b/llvm/test/Transforms/InstCombine/addrspacecast.ll @@ -141,7 +141,7 @@ define i32 @memcpy_addrspacecast() nounwind { ; CHECK-NEXT: [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_INC:%.*]], [[LOOP_BODY]] ] ; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[SUM_INC:%.*]], [[LOOP_BODY]] ] ; CHECK-NEXT: [[TMP0:%.*]] = trunc i32 [[I]] to i16 -; CHECK-NEXT: [[PTR:%.*]] = getelementptr i8, ptr addrspace(2) getelementptr inbounds (i8, ptr addrspace(2) @const_array, i16 4), i16 [[TMP0]] +; CHECK-NEXT: [[PTR:%.*]] = getelementptr i8, ptr addrspace(2) getelementptr inbounds nuw (i8, ptr addrspace(2) @const_array, i16 4), i16 [[TMP0]] ; CHECK-NEXT: [[LOAD:%.*]] = load i8, ptr addrspace(2) [[PTR]], align 1 ; CHECK-NEXT: [[EXT:%.*]] = zext i8 [[LOAD]] to i32 ; CHECK-NEXT: [[SUM_INC]] = add i32 [[SUM]], [[EXT]] diff --git a/llvm/test/Transforms/InstCombine/align-addr.ll b/llvm/test/Transforms/InstCombine/align-addr.ll index 58647dc9595d82..6ef4d85fe4e412 100644 --- a/llvm/test/Transforms/InstCombine/align-addr.ll +++ b/llvm/test/Transforms/InstCombine/align-addr.ll @@ -81,7 +81,7 @@ define <16 x i8> @test1_as1(<2 x i64> %x) { define <16 x i8> @test1_as1_gep(<2 x i64> %x) { ; CHECK-LABEL: @test1_as1_gep( -; CHECK-NEXT: [[TMP:%.*]] = load <16 x i8>, ptr addrspace(1) getelementptr inbounds (i8, ptr addrspace(1) @GLOBAL_as1_gep, i32 16), align 1 +; CHECK-NEXT: [[TMP:%.*]] = load <16 x i8>, ptr addrspace(1) getelementptr inbounds nuw (i8, ptr addrspace(1) @GLOBAL_as1_gep, i32 16), align 1 ; CHECK-NEXT: ret <16 x i8> [[TMP]] ; %tmp = load <16 x i8>, ptr addrspace(1) getelementptr ([8 x i32], ptr addrspace(1) @GLOBAL_as1_gep, i16 0, i16 4), align 1 diff --git a/llvm/test/Transforms/InstCombine/binop-select-cast-of-select-cond.ll b/llvm/test/Transforms/InstCombine/binop-select-cast-of-select-cond.ll index a3cd0328e9b590..41367d55d8894a 100644 --- a/llvm/test/Transforms/InstCombine/binop-select-cast-of-select-cond.ll +++ b/llvm/test/Transforms/InstCombine/binop-select-cast-of-select-cond.ll @@ -231,7 +231,7 @@ define <2 x i8> @vectorized_add(<2 x i1> %c, <2 x i8> %arg) { define i64 @pr64669(i64 %a) { ; CHECK-LABEL: define i64 @pr64669 ; CHECK-SAME: (i64 [[A:%.*]]) { -; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq ptr getelementptr inbounds (i8, ptr @b, i64 100), @c +; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq ptr getelementptr inbounds nuw (i8, ptr @b, i64 100), @c ; CHECK-NEXT: [[TMP1:%.*]] = add i64 [[A]], 1 ; CHECK-NEXT: [[ADD:%.*]] = select i1 [[CMP_NOT]], i64 0, i64 [[TMP1]] ; CHECK-NEXT: ret i64 [[ADD]] diff --git a/llvm/test/Transforms/InstCombine/canonicalize-gep-constglob.ll b/llvm/test/Transforms/InstCombine/canonicalize-gep-constglob.ll index 53585dfde48b22..1520d6ce59548d 100644 --- a/llvm/test/Transforms/InstCombine/canonicalize-gep-constglob.ll +++ b/llvm/test/Transforms/InstCombine/canonicalize-gep-constglob.ll @@ -8,7 +8,7 @@ define ptr @x12(i64 %x) { ; CHECK-SAME: i64 [[X:%.*]]) { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[GEP_IDX:%.*]] = mul nsw i64 [[X]], 400 -; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr getelementptr inbounds (i8, ptr @glob, i64 84), i64 [[GEP_IDX]] +; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 84), i64 [[GEP_IDX]] ; CHECK-NEXT: ret ptr [[GEP]] ; entry: @@ -22,7 +22,7 @@ define ptr @x1y(i64 %x, i64 %y) { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[GEP_IDX:%.*]] = mul nsw i64 [[X]], 400 ; CHECK-NEXT: [[GEP_IDX1:%.*]] = shl nsw i64 [[Y]], 2 -; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr getelementptr inbounds (i8, ptr @glob, i64 116), i64 [[GEP_IDX]] +; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 116), i64 [[GEP_IDX]] ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[TMP0]], i64 [[GEP_IDX1]] ; CHECK-NEXT: ret ptr [[GEP]] ; @@ -35,7 +35,7 @@ define ptr @xzy(i64 %x, i64 %y, i64 %z) { ; CHECK-LABEL: define ptr @xzy( ; CHECK-SAME: i64 [[X:%.*]], i64 [[Y:%.*]], i64 [[Z:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr inbounds (i8, ptr @glob, i64 40), i64 0, i64 [[X]], i64 [[Z]], i64 [[Y]] +; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [10 x [10 x [10 x i32]]], ptr getelementptr inbounds nuw (i8, ptr @glob, i64 40), i64 0, i64 [[X]], i64 [[Z]], i64 [[Y]] ; CHECK-NEXT: ret ptr [[GEP]] ; entry: @@ -47,7 +47,7 @@ define ptr @zerox(i64 %x) { ; CHECK-LABEL: define ptr @zerox( ; CHECK-SAME: i64 [[X:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [10 x i32], ptr getelementptr inbounds (i8, ptr @glob, i64 32), i64 0, i64 [[X]] +; CHECK-NEXT: [[GEP:%.*]] = getelementptr inbounds [10 x i32], ptr getelementptr inbounds nuw (i8, ptr @glob, i64 32), i64 0, i64 [[X]] ; CHECK-NEXT: ret ptr [[GEP]] ; entry: @@ -60,9 +60,9 @@ define i32 @twoloads(i64 %x) { ; CHECK-SAME: i64 [[X:%.*]]) { ; CHECK-NEXT: entry: ; CHECK-NEXT: [[GEP1_IDX:%.*]] = mul nsw i64 [[X]], 400 -; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i8, ptr getelementptr inbounds (i8, ptr @glob, i64 134), i64 [[GEP1_IDX]] +; CHECK-NEXT: [[GEP1:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 134), i64 [[GEP1_IDX]] ; CHECK-NEXT: [[GEP2_IDX:%.*]] = mul nsw i64 [[X]], 400 -; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i8, ptr getelementptr inbounds (i8, ptr @glob, i64 132), i64 [[GEP2_IDX]] +; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i8, ptr getelementptr inbounds nuw (i8, ptr @glob, i64 132), i64 [[GEP2_IDX]] ; CHECK-NEXT: [[A:%.*]] = load i32, ptr [[GEP1]], align 4 ; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[GEP2]], align 4 ; CHECK-NEXT: [[C:%.*]] = add i32 [[A]], [[B]] diff --git a/llvm/test/Transforms/InstCombine/constant-fold-address-space-pointer.ll b/llvm/test/Transforms/InstCombine/constant-fold-address-space-pointer.ll index dafe3900fef3b7..81052194b6b95a 100644 --- a/llvm/test/Transforms/InstCombine/constant-fold-address-space-pointer.ll +++ b/llvm/test/Transforms/InstCombine/constant-fold-address-space-pointer.ll @@ -225,7 +225,7 @@ define i32 @test_cast_gep_large_indices_as() { define i32 @test_constant_cast_gep_struct_indices_as() { ; CHECK-LABEL: @test_constant_cast_gep_struct_indices_as( -; CHECK-NEXT: [[Y:%.*]] = load i32, ptr addrspace(3) getelementptr inbounds (i8, ptr addrspace(3) @constant_fold_global_ptr, i16 16), align 4 +; CHECK-NEXT: [[Y:%.*]] = load i32, ptr addrspace(3) getelementptr inbounds nuw (i8, ptr addrspace(3) @constant_fold_global_ptr, i16 16), align 4 ; CHECK-NEXT: ret i32 [[Y]] ; %x = getelementptr %struct.foo, ptr addrspace(3) @constant_fold_global_ptr, i18 0, i32 2, i12 2 diff --git a/llvm/test/Transforms/InstCombine/constant-fold-gep.ll b/llvm/test/Transforms/InstCombine/constant-fold-gep.ll index 54b7a6f66ecd2a..321b97f557735f 100644 --- a/llvm/test/Transforms/InstCombine/constant-fold-gep.ll +++ b/llvm/test/Transforms/InstCombine/constant-fold-gep.ll @@ -12,24 +12,24 @@ target dat... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/119214 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits