mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-07 10:54:01 +00:00
[Attributor][NFC] Precommit test
This commit is contained in:
parent
b90d6b237f
commit
81a02b0767
@ -19,6 +19,7 @@ declare noalias ptr @calloc(i64, i64) allockind("alloc,zeroed") allocsize(0, 1)
|
||||
; CHECK: @[[GINT3:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 undef, align 4
|
||||
; CHECK: @[[GINT4:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 0, align 4
|
||||
; CHECK: @[[GINT5:[a-zA-Z0-9_$"\\.-]+]] = internal global i32 undef, align 4
|
||||
; CHECK: @[[B:[a-zA-Z0-9_$"\\.-]+]] = global i32 0
|
||||
;.
|
||||
define internal void @write1ToGInt1() {
|
||||
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)
|
||||
@ -48,7 +49,7 @@ define void @entry1(i1 %c, i32 %v) {
|
||||
; TUNIT-SAME: (i1 [[C:%.*]], i32 [[V:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; TUNIT-NEXT: [[L0:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L0]])
|
||||
; TUNIT-NEXT: call void @write1ToGInt1() #[[ATTR10:[0-9]+]]
|
||||
; TUNIT-NEXT: call void @write1ToGInt1() #[[ATTR11:[0-9]+]]
|
||||
; TUNIT-NEXT: [[L1:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L1]])
|
||||
; TUNIT-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
@ -60,7 +61,7 @@ define void @entry1(i1 %c, i32 %v) {
|
||||
; TUNIT: F:
|
||||
; TUNIT-NEXT: [[L3:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L3]])
|
||||
; TUNIT-NEXT: call void @write1ToGInt1() #[[ATTR10]]
|
||||
; TUNIT-NEXT: call void @write1ToGInt1() #[[ATTR11]]
|
||||
; TUNIT-NEXT: [[L4:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L4]])
|
||||
; TUNIT-NEXT: ret void
|
||||
@ -70,7 +71,7 @@ define void @entry1(i1 %c, i32 %v) {
|
||||
; CGSCC-SAME: (i1 [[C:%.*]], i32 [[V:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; CGSCC-NEXT: [[L0:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L0]])
|
||||
; CGSCC-NEXT: call void @write1ToGInt1() #[[ATTR10:[0-9]+]]
|
||||
; CGSCC-NEXT: call void @write1ToGInt1() #[[ATTR13:[0-9]+]]
|
||||
; CGSCC-NEXT: [[L1:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L1]])
|
||||
; CGSCC-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
@ -82,7 +83,7 @@ define void @entry1(i1 %c, i32 %v) {
|
||||
; CGSCC: F:
|
||||
; CGSCC-NEXT: [[L3:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L3]])
|
||||
; CGSCC-NEXT: call void @write1ToGInt1() #[[ATTR10]]
|
||||
; CGSCC-NEXT: call void @write1ToGInt1() #[[ATTR13]]
|
||||
; CGSCC-NEXT: [[L4:%.*]] = load i32, ptr @GInt1, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L4]])
|
||||
; CGSCC-NEXT: ret void
|
||||
@ -113,7 +114,7 @@ define void @entry2(i1 %c, i32 %v) {
|
||||
; TUNIT-SAME: (i1 [[C:%.*]], i32 [[V:%.*]]) #[[ATTR5]] {
|
||||
; TUNIT-NEXT: [[L0:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L0]])
|
||||
; TUNIT-NEXT: call void @write1ToGInt2() #[[ATTR10]]
|
||||
; TUNIT-NEXT: call void @write1ToGInt2() #[[ATTR11]]
|
||||
; TUNIT-NEXT: [[L1:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L1]])
|
||||
; TUNIT-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
@ -125,7 +126,7 @@ define void @entry2(i1 %c, i32 %v) {
|
||||
; TUNIT: F:
|
||||
; TUNIT-NEXT: [[L3:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L3]])
|
||||
; TUNIT-NEXT: call void @write1ToGInt2() #[[ATTR10]]
|
||||
; TUNIT-NEXT: call void @write1ToGInt2() #[[ATTR11]]
|
||||
; TUNIT-NEXT: [[L4:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; TUNIT-NEXT: call void @useI32(i32 [[L4]])
|
||||
; TUNIT-NEXT: ret void
|
||||
@ -135,7 +136,7 @@ define void @entry2(i1 %c, i32 %v) {
|
||||
; CGSCC-SAME: (i1 [[C:%.*]], i32 [[V:%.*]]) #[[ATTR5]] {
|
||||
; CGSCC-NEXT: [[L0:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L0]])
|
||||
; CGSCC-NEXT: call void @write1ToGInt2() #[[ATTR10]]
|
||||
; CGSCC-NEXT: call void @write1ToGInt2() #[[ATTR13]]
|
||||
; CGSCC-NEXT: [[L1:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L1]])
|
||||
; CGSCC-NEXT: br i1 [[C]], label [[T:%.*]], label [[F:%.*]]
|
||||
@ -147,7 +148,7 @@ define void @entry2(i1 %c, i32 %v) {
|
||||
; CGSCC: F:
|
||||
; CGSCC-NEXT: [[L3:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L3]])
|
||||
; CGSCC-NEXT: call void @write1ToGInt2() #[[ATTR10]]
|
||||
; CGSCC-NEXT: call void @write1ToGInt2() #[[ATTR13]]
|
||||
; CGSCC-NEXT: [[L4:%.*]] = load i32, ptr @GInt2, align 4
|
||||
; CGSCC-NEXT: call void @useI32(i32 [[L4]])
|
||||
; CGSCC-NEXT: ret void
|
||||
@ -790,6 +791,75 @@ define i32 @exclusion_set3(i1 %c) {
|
||||
ret i32 %final
|
||||
}
|
||||
|
||||
@B = global i32 0
|
||||
|
||||
define internal i32 @readI32(ptr %a) {
|
||||
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write, argmem: none)
|
||||
; TUNIT-LABEL: define {{[^@]+}}@readI32
|
||||
; TUNIT-SAME: () #[[ATTR9:[0-9]+]] {
|
||||
; TUNIT-NEXT: store i32 1, ptr @B, align 4
|
||||
; TUNIT-NEXT: ret i32 undef
|
||||
;
|
||||
; CGSCC: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn
|
||||
; CGSCC-LABEL: define {{[^@]+}}@readI32
|
||||
; CGSCC-SAME: (ptr nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; CGSCC-NEXT: [[R:%.*]] = load i32, ptr [[A]], align 4
|
||||
; CGSCC-NEXT: store i32 1, ptr @B, align 4
|
||||
; CGSCC-NEXT: ret i32 [[R]]
|
||||
;
|
||||
%r = load i32, ptr %a
|
||||
store i32 1, ptr @B
|
||||
ret i32 %r
|
||||
}
|
||||
|
||||
define internal i32 @broker(ptr %a) {
|
||||
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write, argmem: none)
|
||||
; TUNIT-LABEL: define {{[^@]+}}@broker
|
||||
; TUNIT-SAME: () #[[ATTR9]] {
|
||||
; TUNIT-NEXT: [[R:%.*]] = call i32 @readI32() #[[ATTR12:[0-9]+]]
|
||||
; TUNIT-NEXT: ret i32 undef
|
||||
;
|
||||
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn memory(readwrite, argmem: none)
|
||||
; CGSCC-LABEL: define {{[^@]+}}@broker
|
||||
; CGSCC-SAME: (i32 [[TMP0:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; CGSCC-NEXT: [[A_PRIV:%.*]] = alloca i32, align 4
|
||||
; CGSCC-NEXT: store i32 [[TMP0]], ptr [[A_PRIV]], align 4
|
||||
; CGSCC-NEXT: [[R:%.*]] = call i32 @readI32(ptr noalias nocapture nofree noundef nonnull readonly align 4 dereferenceable(4) [[A_PRIV]]) #[[ATTR14:[0-9]+]]
|
||||
; CGSCC-NEXT: ret i32 [[R]]
|
||||
;
|
||||
%r = call i32 @readI32(ptr %a)
|
||||
ret i32 %r
|
||||
}
|
||||
|
||||
; FIXME: This function should return 1, not 0
|
||||
define i32 @two_calls() {
|
||||
; TUNIT: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(write)
|
||||
; TUNIT-LABEL: define {{[^@]+}}@two_calls
|
||||
; TUNIT-SAME: () #[[ATTR4]] {
|
||||
; TUNIT-NEXT: [[A:%.*]] = alloca i32, align 4
|
||||
; TUNIT-NEXT: [[D:%.*]] = call i32 @broker() #[[ATTR12]]
|
||||
; TUNIT-NEXT: [[R:%.*]] = call i32 @broker() #[[ATTR12]]
|
||||
; TUNIT-NEXT: ret i32 0
|
||||
;
|
||||
; CGSCC: Function Attrs: mustprogress nofree nosync nounwind willreturn
|
||||
; CGSCC-LABEL: define {{[^@]+}}@two_calls
|
||||
; CGSCC-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; CGSCC-NEXT: [[A:%.*]] = alloca i32, align 4
|
||||
; CGSCC-NEXT: store i32 0, ptr [[A]], align 4
|
||||
; CGSCC-NEXT: [[TMP1:%.*]] = load i32, ptr [[A]], align 4
|
||||
; CGSCC-NEXT: [[D:%.*]] = call i32 @broker(i32 noundef [[TMP1]]) #[[ATTR14]]
|
||||
; CGSCC-NEXT: store i32 1, ptr [[A]], align 4
|
||||
; CGSCC-NEXT: [[R:%.*]] = call i32 @broker(i32 noundef 1) #[[ATTR14]]
|
||||
; CGSCC-NEXT: ret i32 [[R]]
|
||||
;
|
||||
%a = alloca i32
|
||||
store i32 0, ptr %a
|
||||
%d = call i32 @broker(ptr %a)
|
||||
store i32 1, ptr %a
|
||||
%r = call i32 @broker(ptr %a)
|
||||
ret i32 %r
|
||||
}
|
||||
|
||||
;.
|
||||
; TUNIT: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
|
||||
; TUNIT: attributes #[[ATTR1:[0-9]+]] = { nocallback nosync }
|
||||
@ -800,8 +870,10 @@ define i32 @exclusion_set3(i1 %c) {
|
||||
; TUNIT: attributes #[[ATTR6]] = { nocallback }
|
||||
; TUNIT: attributes #[[ATTR7]] = { norecurse }
|
||||
; TUNIT: attributes #[[ATTR8]] = { nosync }
|
||||
; TUNIT: attributes #[[ATTR9:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: write) }
|
||||
; TUNIT: attributes #[[ATTR10]] = { nosync nounwind memory(write) }
|
||||
; TUNIT: attributes #[[ATTR9]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(write, argmem: none) }
|
||||
; TUNIT: attributes #[[ATTR10:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: write) }
|
||||
; TUNIT: attributes #[[ATTR11]] = { nosync nounwind memory(write) }
|
||||
; TUNIT: attributes #[[ATTR12]] = { nofree nosync nounwind willreturn memory(write) }
|
||||
;.
|
||||
; CGSCC: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
|
||||
; CGSCC: attributes #[[ATTR1:[0-9]+]] = { nocallback nosync }
|
||||
@ -812,6 +884,10 @@ define i32 @exclusion_set3(i1 %c) {
|
||||
; CGSCC: attributes #[[ATTR6]] = { norecurse nosync }
|
||||
; CGSCC: attributes #[[ATTR7]] = { nocallback }
|
||||
; CGSCC: attributes #[[ATTR8]] = { norecurse }
|
||||
; CGSCC: attributes #[[ATTR9:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: write) }
|
||||
; CGSCC: attributes #[[ATTR10]] = { nounwind memory(write) }
|
||||
; CGSCC: attributes #[[ATTR9]] = { mustprogress nofree norecurse nosync nounwind willreturn }
|
||||
; CGSCC: attributes #[[ATTR10]] = { mustprogress nofree nosync nounwind willreturn memory(readwrite, argmem: none) }
|
||||
; CGSCC: attributes #[[ATTR11]] = { mustprogress nofree nosync nounwind willreturn }
|
||||
; CGSCC: attributes #[[ATTR12:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: write) }
|
||||
; CGSCC: attributes #[[ATTR13]] = { nounwind memory(write) }
|
||||
; CGSCC: attributes #[[ATTR14]] = { nofree nounwind willreturn }
|
||||
;.
|
||||
|
@ -20,6 +20,8 @@
|
||||
// CHECK-NOT: define
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void f(long *A, int N) {
|
||||
long i = 0;
|
||||
#pragma omp target map(A[ : N])
|
||||
@ -34,5 +36,6 @@ void f(long *A, int N) {
|
||||
int main() {
|
||||
long A[1];
|
||||
f(&A[0], 1);
|
||||
return A[0];
|
||||
printf("%li\n", A[0]);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user