Skip to content

Commit 5eb7a42

Browse files
committed
[Attributor][NFC] Precommit tests
1 parent 361b536 commit 5eb7a42

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

llvm/test/Transforms/Attributor/callgraph.ll

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,65 @@ define void @func5(i32 %0) {
4949
ret void
5050
}
5151

52+
define i32 @musttailCall(i32 %0) {
53+
; CHECK-LABEL: @musttailCall(
54+
; CHECK-NEXT: [[TMP2:%.*]] = icmp ne i32 [[TMP0:%.*]], 0
55+
; CHECK-NEXT: [[TMP3:%.*]] = select i1 [[TMP2]], ptr @func4, ptr @func3
56+
; CHECK-NEXT: [[C:%.*]] = musttail call i32 [[TMP3]](i32 0)
57+
; CHECK-NEXT: ret i32 [[C]]
58+
;
59+
%2 = icmp ne i32 %0, 0
60+
%3 = select i1 %2, ptr @func4, ptr @func3
61+
%c = musttail call i32 (i32) %3(i32 0)
62+
ret i32 %c
63+
}
64+
65+
declare i32 @retI32()
66+
declare void @takeI32(i32)
67+
declare float @retFloatTakeFloat(float)
68+
declare void @void()
69+
70+
define i32 @non_matching_fp1(i1 %c1, i1 %c2, i1 %c) {
71+
; CHECK-LABEL: @non_matching_fp1(
72+
; CHECK-NEXT: [[FP1:%.*]] = select i1 [[C1:%.*]], ptr @retI32, ptr @takeI32
73+
; CHECK-NEXT: [[FP2:%.*]] = select i1 [[C2:%.*]], ptr @retFloatTakeFloat, ptr @void
74+
; CHECK-NEXT: [[FP:%.*]] = select i1 [[C:%.*]], ptr [[FP1]], ptr [[FP2]]
75+
; CHECK-NEXT: [[CALL:%.*]] = call i32 [[FP]](i32 42)
76+
; CHECK-NEXT: ret i32 [[CALL]]
77+
;
78+
%fp1 = select i1 %c1, ptr @retI32, ptr @takeI32
79+
%fp2 = select i1 %c2, ptr @retFloatTakeFloat, ptr @void
80+
%fp = select i1 %c, ptr %fp1, ptr %fp2
81+
%call = call i32 %fp(i32 42)
82+
ret i32 %call
83+
}
84+
85+
define void @non_matching_fp2(i1 %c1, i1 %c2, i1 %c, ptr %unknown) {
86+
; CHECK-LABEL: @non_matching_fp2(
87+
; CHECK-NEXT: [[FP1:%.*]] = select i1 [[C1:%.*]], ptr @retI32, ptr @takeI32
88+
; CHECK-NEXT: [[FP2:%.*]] = select i1 [[C2:%.*]], ptr @retFloatTakeFloat, ptr [[UNKNOWN:%.*]]
89+
; CHECK-NEXT: [[FP:%.*]] = select i1 [[C:%.*]], ptr [[FP1]], ptr [[FP2]]
90+
; CHECK-NEXT: call void [[FP]]()
91+
; CHECK-NEXT: ret void
92+
;
93+
%fp1 = select i1 %c1, ptr @retI32, ptr @takeI32
94+
%fp2 = select i1 %c2, ptr @retFloatTakeFloat, ptr %unknown
95+
%fp = select i1 %c, ptr %fp1, ptr %fp2
96+
call void %fp()
97+
ret void
98+
}
99+
100+
define i32 @non_matching_unknown(i1 %c, ptr %fn) {
101+
; CHECK-LABEL: @non_matching_unknown(
102+
; CHECK-NEXT: [[FP:%.*]] = select i1 [[C:%.*]], ptr @retI32, ptr [[FN:%.*]]
103+
; CHECK-NEXT: [[CALL:%.*]] = call i32 [[FP]](i32 42)
104+
; CHECK-NEXT: ret i32 [[CALL]]
105+
;
106+
%fp = select i1 %c, ptr @retI32, ptr %fn
107+
%call = call i32 %fp(i32 42)
108+
ret i32 %call
109+
}
110+
52111
define void @broker(ptr %unknown) !callback !0 {
53112
; CHECK-LABEL: @broker(
54113
; CHECK-NEXT: call void [[UNKNOWN:%.*]]()
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// clang-format off
2+
//
3+
// RUN: %libomptarget-compileopt-generic -fopenmp-target-jit
4+
// RUN: env LIBOMPTARGET_JIT_PRE_OPT_IR_MODULE=%t.pre.ll \
5+
// RUN: LIBOMPTARGET_JIT_SKIP_OPT=true \
6+
// RUN: %libomptarget-run-generic
7+
// RUN: %fcheck-plain-generic --input-file %t.pre.ll %s
8+
//
9+
// clang-format on
10+
11+
// UNSUPPORTED: aarch64-unknown-linux-gnu
12+
// UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
13+
// UNSUPPORTED: x86_64-pc-linux-gnu
14+
// UNSUPPORTED: x86_64-pc-linux-gnu-LTO
15+
16+
// FIXME: We want that there is only the kernel function left, not two outlined
17+
// parallel regions.
18+
//
19+
// CHECK: define
20+
// CHECK: define
21+
// CHECK: define
22+
23+
#include <omp.h>
24+
void f(long *A, int N) {
25+
long i = 0;
26+
#pragma omp target map(A[ : N])
27+
{
28+
#pragma omp parallel firstprivate(i)
29+
A[omp_get_thread_num()] = i;
30+
#pragma omp parallel firstprivate(i, N)
31+
A[omp_get_thread_num()] += i + N;
32+
}
33+
}
34+
35+
int main() {
36+
long A[1];
37+
f(&A[0], 1);
38+
return A[0];
39+
}

0 commit comments

Comments
 (0)