Skip to content

Commit

Permalink
[FuncSpec] Prevent assertion failure when no store value is found
Browse files Browse the repository at this point in the history
If the only user of the Alloca argument provided to getPromotableAlloca()
is the same as the Call argument, StoreValue is never set and results
in an assertion failure that isa<> was used on a nullptr when passed into
getCandidateConstant().

This was originally seen when trying to build SPEC 2006 416.gamess using
flang with lto enabled.

Differential Revision: https://reviews.llvm.org/D143457
  • Loading branch information
jonathonpenix committed Feb 7, 2023
1 parent a69f234 commit dfb98d8
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
4 changes: 4 additions & 0 deletions llvm/lib/Transforms/IPO/FunctionSpecialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,10 @@ Constant *FunctionSpecializer::getPromotableAlloca(AllocaInst *Alloca,
// Bail if there is any other unknown usage.
return nullptr;
}

if (!StoreValue)
return nullptr;

return getCandidateConstant(StoreValue);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
; RUN: opt -S --passes="ipsccp<func-spec>" -force-function-specialization < %s | FileCheck %s

; Tests that `bar` has been specialized and that the compiler did not crash
; while attempting to promote the alloca in `entry`.
; CHECK: bar.1

@block = internal global [8 x i8] zeroinitializer, align 1

define dso_local void @entry() {
%1 = alloca i32, align 4
call void @foo(ptr nonnull %1)
ret void
}

define internal void @foo(ptr nocapture readnone %0) {
%2 = alloca i32, align 4
call void @bar(ptr nonnull %2, ptr nonnull @block)
call void @bar(ptr nonnull %2, ptr nonnull getelementptr inbounds ([8 x i8], ptr @block, i64 0, i64 4))
ret void
}

define internal void @bar(ptr nocapture readonly %0, ptr nocapture readonly %1) {
%3 = load i32, ptr %0, align 4
%4 = load i32, ptr %1, align 4
ret void
}

0 comments on commit dfb98d8

Please sign in to comment.