|
1 | 1 | // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-cir %s -o - | FileCheck %s -check-prefix=CIR |
2 | 2 | // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o - | FileCheck %s -check-prefix=LLVM |
| 3 | +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s -check-prefix=OGCG |
3 | 4 |
|
4 | 5 | void foo(void *a) { |
5 | | - __builtin_prefetch(a, 1, 1); |
| 6 | + __builtin_prefetch(a); // rw=0, locality=3 |
| 7 | + __builtin_prefetch(a, 0); // rw=0, locality=3 |
| 8 | + __builtin_prefetch(a, 1); // rw=1, locality=3 |
| 9 | + __builtin_prefetch(a, 1, 1); // rw=1, locality=1 |
6 | 10 | } |
7 | 11 |
|
8 | | -// CIR: cir.func dso_local @foo(%arg0: !cir.ptr<!void> loc({{.*}})) |
9 | | -// CIR: [[PTR_ALLOC:%.*]] = cir.alloca !cir.ptr<!void>, !cir.ptr<!cir.ptr<!void>>, ["a", init] {alignment = 8 : i64} |
10 | | -// CIR: cir.store %arg0, [[PTR_ALLOC]] : !cir.ptr<!void>, !cir.ptr<!cir.ptr<!void>> |
11 | | -// CIR: [[PTR:%.*]] = cir.load{{.*}} [[PTR_ALLOC]] : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void> |
12 | | -// CIR: cir.prefetch([[PTR]] : !cir.ptr<!void>) locality(1) write |
13 | | -// CIR: cir.return |
| 12 | +// CIR-LABEL: cir.func dso_local @foo( |
| 13 | +// CIR: %[[ALLOCA:.*]] = cir.alloca !cir.ptr<!void> |
| 14 | +// CIR: cir.store %arg0, %[[ALLOCA]] : !cir.ptr<!void>, !cir.ptr<!cir.ptr<!void>> |
| 15 | +// CIR: %[[P1:.*]] = cir.load{{.*}} %[[ALLOCA]] : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void> |
| 16 | +// CIR: cir.prefetch read locality(3) %[[P1]] : !cir.ptr<!void> |
| 17 | +// CIR: %[[P2:.*]] = cir.load{{.*}} %[[ALLOCA]] : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void> |
| 18 | +// CIR: cir.prefetch read locality(3) %[[P2]] : !cir.ptr<!void> |
| 19 | +// CIR: %[[P3:.*]] = cir.load{{.*}} %[[ALLOCA]] : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void> |
| 20 | +// CIR: cir.prefetch write locality(3) %[[P3]] : !cir.ptr<!void> |
| 21 | +// CIR: %[[P4:.*]] = cir.load{{.*}} %[[ALLOCA]] : !cir.ptr<!cir.ptr<!void>>, !cir.ptr<!void> |
| 22 | +// CIR: cir.prefetch write locality(1) %[[P4]] : !cir.ptr<!void> |
| 23 | +// CIR: cir.return |
14 | 24 |
|
15 | | -// LLVM: define dso_local void @foo(ptr [[ARG0:%.*]]) |
16 | | -// LLVM: [[PTR_ALLOC:%.*]] = alloca ptr, i64 1 |
17 | | -// LLVM: store ptr [[ARG0]], ptr [[PTR_ALLOC]] |
18 | | -// LLVM: [[PTR:%.*]] = load ptr, ptr [[PTR_ALLOC]] |
19 | | -// LLVM: call void @llvm.prefetch.p0(ptr [[PTR]], i32 1, i32 1, i32 1) |
20 | | -// LLVM: ret void |
| 25 | +// LLVM-LABEL: define dso_local void @foo( |
| 26 | +// LLVM: [[ALLOCA:%.*]] = alloca ptr, i64 1 |
| 27 | +// LLVM: store ptr {{.*}}, ptr [[ALLOCA]] |
| 28 | +// LLVM: [[LP1:%.*]] = load ptr, ptr [[ALLOCA]] |
| 29 | +// LLVM: call void @llvm.prefetch.p0(ptr [[LP1]], i32 0, i32 3, i32 1) |
| 30 | +// LLVM: [[LP2:%.*]] = load ptr, ptr [[ALLOCA]] |
| 31 | +// LLVM: call void @llvm.prefetch.p0(ptr [[LP2]], i32 0, i32 3, i32 1) |
| 32 | +// LLVM: [[LP3:%.*]] = load ptr, ptr [[ALLOCA]] |
| 33 | +// LLVM: call void @llvm.prefetch.p0(ptr [[LP3]], i32 1, i32 3, i32 1) |
| 34 | +// LLVM: [[LP4:%.*]] = load ptr, ptr [[ALLOCA]] |
| 35 | +// LLVM: call void @llvm.prefetch.p0(ptr [[LP4]], i32 1, i32 1, i32 1) |
| 36 | +// LLVM: ret void |
| 37 | + |
| 38 | +// OGCG-LABEL: define dso_local void @foo(ptr |
| 39 | +// OGCG: call void @llvm.prefetch.p0(ptr {{.*}}, i32 0, i32 3, i32 1) |
| 40 | +// OGCG: call void @llvm.prefetch.p0(ptr {{.*}}, i32 0, i32 3, i32 1) |
| 41 | +// OGCG: call void @llvm.prefetch.p0(ptr {{.*}}, i32 1, i32 3, i32 1) |
| 42 | +// OGCG: call void @llvm.prefetch.p0(ptr {{.*}}, i32 1, i32 1, i32 1) |
| 43 | +// OGCG: ret void |
0 commit comments