[llvm] [IR] Fix crashes caused by #85592 (PR #87169)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Mar 30 14:02:06 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-ir
@llvm/pr-subscribers-llvm-transforms
Author: None (elhewaty)
<details>
<summary>Changes</summary>
This patch fixes the crash caused by pull request: https://github.com/llvm/llvm-project/pull/85592
---
Full diff: https://github.com/llvm/llvm-project/pull/87169.diff
2 Files Affected:
- (modified) llvm/lib/IR/Operator.cpp (+3-2)
- (modified) llvm/test/Transforms/FunctionAttrs/noundef.ll (+14)
``````````diff
diff --git a/llvm/lib/IR/Operator.cpp b/llvm/lib/IR/Operator.cpp
index 495769279e3363..7b4449cd825f9b 100644
--- a/llvm/lib/IR/Operator.cpp
+++ b/llvm/lib/IR/Operator.cpp
@@ -28,8 +28,9 @@ bool Operator::hasPoisonGeneratingFlags() const {
return OBO->hasNoUnsignedWrap() || OBO->hasNoSignedWrap();
}
case Instruction::Trunc: {
- auto *TI = dyn_cast<TruncInst>(this);
- return TI->hasNoUnsignedWrap() || TI->hasNoSignedWrap();
+ if (auto *TI = dyn_cast<TruncInst>(this))
+ return TI->hasNoUnsignedWrap() || TI->hasNoSignedWrap();
+ return false;
}
case Instruction::UDiv:
case Instruction::SDiv:
diff --git a/llvm/test/Transforms/FunctionAttrs/noundef.ll b/llvm/test/Transforms/FunctionAttrs/noundef.ll
index 946b562f39553e..9ab37082a30329 100644
--- a/llvm/test/Transforms/FunctionAttrs/noundef.ll
+++ b/llvm/test/Transforms/FunctionAttrs/noundef.ll
@@ -1,6 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
; RUN: opt < %s -passes='function-attrs' -S | FileCheck %s
+ at g_var = external global [0 x i8]
+
define i32 @test_ret_constant() {
; CHECK-LABEL: define noundef i32 @test_ret_constant(
; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
@@ -152,3 +154,15 @@ define i32 @test_ret_constant_msan() sanitize_memory {
;
ret i32 0
}
+
+define i64 @test_trunc_with_constexpr() {
+; CHECK-LABEL: define noundef i64 @test_trunc_with_constexpr(
+; CHECK-SAME: ) #[[ATTR0]] {
+; CHECK-NEXT: [[ADD:%.*]] = add i32 trunc (i64 sub (i64 0, i64 ptrtoint (ptr @g_var to i64)) to i32), 1
+; CHECK-NEXT: [[CONV:%.*]] = sext i32 [[ADD]] to i64
+; CHECK-NEXT: ret i64 [[CONV]]
+;
+ %add = add i32 trunc (i64 sub (i64 0, i64 ptrtoint (ptr @g_var to i64)) to i32), 1
+ %conv = sext i32 %add to i64
+ ret i64 %conv
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/87169
More information about the llvm-commits
mailing list