Skip to content

Commit

Permalink
ThinLTOBitcodeWriter: Do not rewrite intrinsic functions when splitti…
Browse files Browse the repository at this point in the history
…ng modules.

Changing the type of an intrinsic may invalidate the IR.

Differential Revision: https://reviews.llvm.org/D35593

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308500 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
pcc committed Jul 19, 2017
1 parent 36c6a2e commit 0bd44fc
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
4 changes: 3 additions & 1 deletion lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ void simplifyExternals(Module &M) {
continue;
}

if (!F.isDeclaration() || F.getFunctionType() == EmptyFT)
if (!F.isDeclaration() || F.getFunctionType() == EmptyFT ||
// Changing the type of an intrinsic may invalidate the IR.
F.getName().startswith("llvm."))
continue;

Function *NewF =
Expand Down
4 changes: 4 additions & 0 deletions test/Transforms/ThinLTOBitcodeWriter/split-vfunc.ll
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@ define i64 @ok1(i8* %this) {
; M0: define i64 @ok2
; M1: define available_externally i64 @ok2
define i64 @ok2(i8* %this, i64 %arg) {
%1 = tail call { i64, i1 } @llvm.sadd.with.overflow.i64(i64 %arg, i64 %arg)
ret i64 %arg
}

; M1: declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64)
declare { i64, i1 } @llvm.sadd.with.overflow.i64(i64, i64)

; M0: define void @wrongtype1
; M1: declare void @wrongtype1()
define void @wrongtype1(i8*) {
Expand Down

0 comments on commit 0bd44fc

Please sign in to comment.