-
Notifications
You must be signed in to change notification settings - Fork 11.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add auto-upgrade support for annotation intrinsics
The llvm.ptr.annotation and llvm.var.annotation intrinsics were changed since the 11.0 release to add an additional parameter. This patch auto-upgrades IR containing the four-parameter versions of these intrinsics, adding a null pointer as the fifth argument. Differential Revision: https://reviews.llvm.org/D95993
- Loading branch information
1 parent
bb16efe
commit 9a82790
Showing
5 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
; Test upgrade of ptr.annotation intrinsics. | ||
; | ||
; RUN: llvm-dis < %s.bc | FileCheck %s | ||
|
||
; Unused return values | ||
; The arguments passed to the intrinisic wouldn't normally be arguments to | ||
; the function, but that makes it easier to test that they are handled | ||
; correctly. | ||
define void @f1(i8* %arg0, i8* %arg1, i8* %arg2, i32 %arg3) { | ||
;CHECK: @f1(i8* [[ARG0:%.*]], i8* [[ARG1:%.*]], i8* [[ARG2:%.*]], i32 [[ARG3:%.*]]) | ||
%t0 = call i8* @llvm.ptr.annotation.p0i8(i8* %arg0, i8* %arg1, i8* %arg2, i32 %arg3) | ||
;CHECK: call i8* @llvm.ptr.annotation.p0i8(i8* [[ARG0]], i8* [[ARG1]], i8* [[ARG2]], i32 [[ARG3]], i8* null) | ||
|
||
%arg0_p16 = bitcast i8* %arg0 to i16* | ||
%t1 = call i16* @llvm.ptr.annotation.p0i16(i16* %arg0_p16, i8* %arg1, i8* %arg2, i32 %arg3) | ||
;CHECK: [[ARG0_P16:%.*]] = bitcast | ||
;CHECK: call i16* @llvm.ptr.annotation.p0i16(i16* [[ARG0_P16]], i8* [[ARG1]], i8* [[ARG2]], i32 [[ARG3]], i8* null) | ||
|
||
%arg0_p256 = bitcast i8* %arg0 to i256* | ||
%t2 = call i256* @llvm.ptr.annotation.p0i256(i256* %arg0_p256, i8* %arg1, i8* %arg2, i32 %arg3) | ||
;CHECK: [[ARG0_P256:%.*]] = bitcast | ||
;CHECK: call i256* @llvm.ptr.annotation.p0i256(i256* [[ARG0_P256]], i8* [[ARG1]], i8* [[ARG2]], i32 [[ARG3]], i8* null) | ||
ret void | ||
} | ||
|
||
; Used return values | ||
define i16* @f2(i16* %x, i16* %y) { | ||
%t0 = call i16* @llvm.ptr.annotation.p0i16(i16* %x, i8* undef, i8* undef, i32 undef) | ||
%t1 = call i16* @llvm.ptr.annotation.p0i16(i16* %y, i8* undef, i8* undef, i32 undef) | ||
%cmp = icmp ugt i16* %t0, %t1 | ||
%sel = select i1 %cmp, i16* %t0, i16* %t1 | ||
ret i16* %sel | ||
; CHECK: [[T0:%.*]] = call i16* @llvm.ptr.annotation.p0i16(i16* %x, i8* undef, i8* undef, i32 undef, i8* null) | ||
; CHECK: [[T1:%.*]] = call i16* @llvm.ptr.annotation.p0i16(i16* %y, i8* undef, i8* undef, i32 undef, i8* null) | ||
; CHECK: %cmp = icmp ugt i16* [[T0]], [[T1]] | ||
; CHECK: %sel = select i1 %cmp, i16* [[T0]], i16* [[T1]] | ||
; CHECK: ret i16* %sel | ||
} | ||
|
||
declare i8* @llvm.ptr.annotation.p0i8(i8*, i8*, i8*, i32) | ||
; CHECK: declare i8* @llvm.ptr.annotation.p0i8(i8*, i8*, i8*, i32, i8*) | ||
declare i16* @llvm.ptr.annotation.p0i16(i16*, i8*, i8*, i32) | ||
; CHECK: declare i16* @llvm.ptr.annotation.p0i16(i16*, i8*, i8*, i32, i8*) | ||
declare i256* @llvm.ptr.annotation.p0i256(i256*, i8*, i8*, i32) | ||
; CHECK: declare i256* @llvm.ptr.annotation.p0i256(i256*, i8*, i8*, i32, i8*) |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
; Test upgrade of var.annotation intrinsics. | ||
; | ||
; RUN: llvm-dis < %s.bc | FileCheck %s | ||
|
||
|
||
define void @f(i8* %arg0, i8* %arg1, i8* %arg2, i32 %arg3) { | ||
;CHECK: @f(i8* [[ARG0:%.*]], i8* [[ARG1:%.*]], i8* [[ARG2:%.*]], i32 [[ARG3:%.*]]) | ||
call void @llvm.var.annotation(i8* %arg0, i8* %arg1, i8* %arg2, i32 %arg3) | ||
;CHECK: call void @llvm.var.annotation(i8* [[ARG0]], i8* [[ARG1]], i8* [[ARG2]], i32 [[ARG3]], i8* null) | ||
ret void | ||
} | ||
|
||
; Function Attrs: nofree nosync nounwind willreturn | ||
declare void @llvm.var.annotation(i8*, i8*, i8*, i32) | ||
; CHECK: declare void @llvm.var.annotation(i8*, i8*, i8*, i32, i8*) |
Binary file not shown.