https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/132864
>From 33ce163b669ef76a18bbb6b24f94ade248a242f5 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <matthew.arsena...@amd.com> Date: Tue, 25 Mar 2025 09:39:18 +0700 Subject: [PATCH] llvm-reduce: Do not reduce alloca array sizes to 0 Fixes #64340 --- .../llvm-reduce/reduce-operands-alloca.ll | 69 +++++++++++++++++++ .../llvm-reduce/deltas/ReduceOperands.cpp | 5 ++ 2 files changed, 74 insertions(+) create mode 100644 llvm/test/tools/llvm-reduce/reduce-operands-alloca.ll diff --git a/llvm/test/tools/llvm-reduce/reduce-operands-alloca.ll b/llvm/test/tools/llvm-reduce/reduce-operands-alloca.ll new file mode 100644 index 0000000000000..61c46185b3378 --- /dev/null +++ b/llvm/test/tools/llvm-reduce/reduce-operands-alloca.ll @@ -0,0 +1,69 @@ +; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-zero --test FileCheck --test-arg --check-prefix=CHECK --test-arg %s --test-arg --input-file %s -o %t +; RUN: FileCheck %s --check-prefixes=CHECK,ZERO < %t + +; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-one --test FileCheck --test-arg --check-prefix=CHECK --test-arg %s --test-arg --input-file %s -o %t +; RUN: FileCheck %s --check-prefixes=CHECK,ONE < %t + +; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=operands-poison --test FileCheck --test-arg --check-prefix=CHECK --test-arg %s --test-arg --input-file %s -o %t +; RUN: FileCheck %s --check-prefixes=CHECK,POISON < %t + + +; CHECK-LABEL: @dyn_alloca( +; ZERO: %alloca = alloca i32, i32 %size, align 4 +; ONE: %alloca = alloca i32, align 4 +; POISON: %alloca = alloca i32, i32 %size, align 4 +define void @dyn_alloca(i32 %size) { + %alloca = alloca i32, i32 %size + store i32 0, ptr %alloca + ret void +} + +; CHECK-LABEL: @alloca_0_elt( +; ZERO: %alloca = alloca i32, i32 0, align 4 +; ONE: %alloca = alloca i32, i32 0, align 4 +; POISON: %alloca = alloca i32, i32 0, align 4 +define void @alloca_0_elt() { + %alloca = alloca i32, i32 0 + store i32 0, ptr %alloca + ret void +} + +; CHECK-LABEL: @alloca_1_elt( +; ZERO: %alloca = alloca i32, align 4 +; ONE: %alloca = alloca i32, align 4 +; POISON: %alloca = alloca i32, align 4 +define void @alloca_1_elt() { + %alloca = alloca i32, i32 1 + store i32 0, ptr %alloca + ret void +} + +; CHECK-LABEL: @alloca_1024_elt( +; ZERO: %alloca = alloca i32, i32 1024, align 4 +; ONE: %alloca = alloca i32, align 4 +; POISON: %alloca = alloca i32, i32 1024, align 4 +define void @alloca_1024_elt() { + %alloca = alloca i32, i32 1024 + store i32 0, ptr %alloca + ret void +} + +; CHECK-LABEL: @alloca_poison_elt( +; ZERO: %alloca = alloca i32, i32 poison, align 4 +; ONE: %alloca = alloca i32, align 4 +; POISON: %alloca = alloca i32, i32 poison, align 4 +define void @alloca_poison_elt() { + %alloca = alloca i32, i32 poison + store i32 0, ptr %alloca + ret void +} + +; CHECK-LABEL: @alloca_constexpr_elt( +; ZERO: %alloca = alloca i32, i32 ptrtoint (ptr @alloca_constexpr_elt to i32) +; ONE: %alloca = alloca i32, align 4 +; POISON: %alloca = alloca i32, i32 ptrtoint (ptr @alloca_constexpr_elt to i32) +define void @alloca_constexpr_elt() { + %alloca = alloca i32, i32 ptrtoint (ptr @alloca_constexpr_elt to i32) + store i32 0, ptr %alloca + ret void +} diff --git a/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp b/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp index 1c0dd70666cb9..8c69b1cc202eb 100644 --- a/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp +++ b/llvm/tools/llvm-reduce/deltas/ReduceOperands.cpp @@ -130,6 +130,11 @@ void llvm::reduceOperandsZeroDeltaPass(TestRunner &Test) { auto ReduceValue = [](Use &Op) -> Value * { if (!shouldReduceOperand(Op)) return nullptr; + + // Avoid introducing 0-sized allocations. + if (isa<AllocaInst>(Op.getUser())) + return nullptr; + // Don't duplicate an existing switch case. if (auto *IntTy = dyn_cast<IntegerType>(Op->getType())) if (switchCaseExists(Op, ConstantInt::get(IntTy, 0))) _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits