Skip to content

Commit

Permalink
[GlobalISel] IRTranslator: Translate the intrinsics ignored by CodeGen
Browse files Browse the repository at this point in the history
Summary:
Translate `llvm.assume`, `llvm.var.annotation` and `llvm.sideeffect` to nothing
as they have no effect on CodeGen.

Reviewers: qcolombet, aditya_nandakumar, dsanders, paquette, aemerson, arsenm

Reviewed By: arsenm

Subscribers: hiraditya, wdng, rovka, kristof.beyls, javed.absar, Petar.Avramovic, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362834 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
Volkan Keles committed Jun 7, 2019
1 parent 87b1571 commit f318352
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/CodeGen/GlobalISel/IRTranslator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1108,6 +1108,11 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
}
case Intrinsic::invariant_end:
return true;
case Intrinsic::assume:
case Intrinsic::var_annotation:
case Intrinsic::sideeffect:
// Discard annotate attributes, assumptions, and artificial side-effects.
return true;
}
return false;
}
Expand Down
27 changes: 27 additions & 0 deletions test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2390,3 +2390,30 @@ define float @test_rint_f32(float %x) {
%y = call float @llvm.rint.f32(float %x)
ret float %y
}

declare void @llvm.assume(i1)
define void @test_assume(i1 %x) {
; CHECK-LABEL: name: test_assume
; CHECK-NOT: llvm.assume
; CHECK: RET_ReallyLR
call void @llvm.assume(i1 %x)
ret void
}

declare void @llvm.sideeffect()
define void @test_sideeffect() {
; CHECK-LABEL: name: test_sideeffect
; CHECK-NOT: llvm.sideeffect
; CHECK: RET_ReallyLR
call void @llvm.sideeffect()
ret void
}

declare void @llvm.var.annotation(i8*, i8*, i8*, i32)
define void @test_var_annotation(i8*, i8*, i8*, i32) {
; CHECK-LABEL: name: test_var_annotation
; CHECK-NOT: llvm.var.annotation
; CHECK: RET_ReallyLR
call void @llvm.var.annotation(i8* %0, i8* %1, i8* %2, i32 %3)
ret void
}

0 comments on commit f318352

Please sign in to comment.