[llvm] a1c1cdd - [AlignmentFromAssumes] Skip huge alignment (#202567)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 9 04:04:09 PDT 2026


Author: Hongyu Chen
Date: 2026-06-09T19:04:03+08:00
New Revision: a1c1cdd44b372c08125d2b6a4aa445620cd284a3

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

LOG: [AlignmentFromAssumes] Skip huge alignment (#202567)

Fixes https://github.com/llvm/llvm-project/issues/202043
Though `align` on huge alignment is not supported, the case below
confirms we allow huge alignment in `assume`:
https://github.com/llvm/llvm-project/blob/c4f4206ff3ab97db9577f11bb2dabd40896bcca9/llvm/test/Transforms/InstCombine/assume.ll#L71
In this case, we should skip huge alignment in AlignmentFromAssumes.

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp
    llvm/test/Transforms/AlignmentFromAssumptions/simple.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp b/llvm/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp
index e54a2e54f9943..55b92efc768ae 100644
--- a/llvm/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp
+++ b/llvm/lib/Transforms/Scalar/AlignmentFromAssumptions.cpp
@@ -178,6 +178,9 @@ bool AlignmentFromAssumptionsPass::extractAlignmentInfo(CallInst *I,
   if (!cast<SCEVConstant>(AlignSCEV)->getAPInt().isPowerOf2())
     // Only power of two alignments are supported.
     return false;
+  if (cast<SCEVConstant>(AlignSCEV)->getAPInt().ugt(Value::MaximumAlignment))
+    // Alignment exceeds what LLVM instructions can represent; skip.
+    return false;
   if (AlignOB.Inputs.size() == 3)
     OffSCEV = SE->getSCEV(AlignOB.Inputs[2].get());
   else

diff  --git a/llvm/test/Transforms/AlignmentFromAssumptions/simple.ll b/llvm/test/Transforms/AlignmentFromAssumptions/simple.ll
index d908c2a5206fa..87d25cb323acc 100644
--- a/llvm/test/Transforms/AlignmentFromAssumptions/simple.ll
+++ b/llvm/test/Transforms/AlignmentFromAssumptions/simple.ll
@@ -395,6 +395,18 @@ entry:
   ret i32 %0
 }
 
+define i32 @align_63bit(ptr %p) {
+; CHECK-LABEL: define i32 @align_63bit
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[P]], i64 -9223372036854775808) ]
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[P]], align 4
+; CHECK-NEXT:    ret i32 [[V]]
+;
+  call void @llvm.assume(i1 true) [ "align"(ptr %p, i64 -9223372036854775808) ]
+  %v = load i32, ptr %p, align 4
+  ret i32 %v
+}
+
 declare void @llvm.assume(i1) nounwind
 
 declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind


        


More information about the llvm-commits mailing list