[FileCheck] Support comment directives
Sometimes you want to disable a FileCheck directive without removing
it entirely, or you want to write comments that mention a directive by
name. The `COM:` directive makes it easy to do this. For example,
you might have:
```
; X32: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0
; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but
; COM: X64 will have something similar to X32:
; COM:
; COM: X64: pinsrd_1:
; COM: X64: pinsrd $1, %edi, %xmm0
```
Without this patch, you need to use some combination of rewording and
directive syntax mangling to prevent FileCheck from recognizing the
commented occurrences of `X32:` and `X64:` above as directives.
Moreover, FileCheck diagnostics have been proposed that might complain
about the occurrences of `X64` that don't have the trailing `:`
because they look like directive typos:
<http://lists.llvm.org/pipermail/llvm-dev/2020-April/140610.html>
I think dodging all these problems can prove tedious for test authors,
and directive syntax mangling already makes the purpose of existing
test code unclear. `COM:` can avoid all these problems.
This patch also updates the small set of existing tests that define
`COM` as a check prefix:
- clang/test/CodeGen/default-address-space.c
- clang/test/CodeGenOpenCL/addr-space-struct-arg.cl
- clang/test/Driver/hip-device-libs.hip
- llvm/test/Assembler/drop-debug-info-nonzero-alloca.ll
I think lit should support `COM:` as well. Perhaps `clang -verify`
should too.
Reviewed By: jhenderson, thopre
Differential Revision: https://reviews.llvm.org/D79276
2020-05-05 06:05:55 +08:00
|
|
|
// RUN: %clang_cc1 -triple amdgcn---amdgiz -emit-llvm < %s | FileCheck -check-prefixes=CHECK %s
|
2017-04-12 01:24:23 +08:00
|
|
|
|
2020-03-10 03:25:24 +08:00
|
|
|
// CHECK-DAG: @foo = addrspace(1) global i32 0
|
2017-04-12 01:24:23 +08:00
|
|
|
int foo;
|
|
|
|
|
2020-03-10 03:25:24 +08:00
|
|
|
// CHECK-DAG: @ban = addrspace(1) global [10 x i32] zeroinitializer
|
2017-04-12 01:24:23 +08:00
|
|
|
int ban[10];
|
|
|
|
|
2020-03-10 03:25:24 +08:00
|
|
|
// CHECK-DAG: @A = addrspace(1) global i32* null
|
|
|
|
// CHECK-DAG: @B = addrspace(1) global i32* null
|
2017-04-12 01:24:23 +08:00
|
|
|
int *A;
|
|
|
|
int *B;
|
|
|
|
|
[FileCheck] Support comment directives
Sometimes you want to disable a FileCheck directive without removing
it entirely, or you want to write comments that mention a directive by
name. The `COM:` directive makes it easy to do this. For example,
you might have:
```
; X32: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0
; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but
; COM: X64 will have something similar to X32:
; COM:
; COM: X64: pinsrd_1:
; COM: X64: pinsrd $1, %edi, %xmm0
```
Without this patch, you need to use some combination of rewording and
directive syntax mangling to prevent FileCheck from recognizing the
commented occurrences of `X32:` and `X64:` above as directives.
Moreover, FileCheck diagnostics have been proposed that might complain
about the occurrences of `X64` that don't have the trailing `:`
because they look like directive typos:
<http://lists.llvm.org/pipermail/llvm-dev/2020-April/140610.html>
I think dodging all these problems can prove tedious for test authors,
and directive syntax mangling already makes the purpose of existing
test code unclear. `COM:` can avoid all these problems.
This patch also updates the small set of existing tests that define
`COM` as a check prefix:
- clang/test/CodeGen/default-address-space.c
- clang/test/CodeGenOpenCL/addr-space-struct-arg.cl
- clang/test/Driver/hip-device-libs.hip
- llvm/test/Assembler/drop-debug-info-nonzero-alloca.ll
I think lit should support `COM:` as well. Perhaps `clang -verify`
should too.
Reviewed By: jhenderson, thopre
Differential Revision: https://reviews.llvm.org/D79276
2020-05-05 06:05:55 +08:00
|
|
|
// CHECK-LABEL: define i32 @test1()
|
2017-07-08 21:24:52 +08:00
|
|
|
// CHECK: load i32, i32* addrspacecast{{[^@]+}} @foo
|
2017-04-12 01:24:23 +08:00
|
|
|
int test1() { return foo; }
|
|
|
|
|
[FileCheck] Support comment directives
Sometimes you want to disable a FileCheck directive without removing
it entirely, or you want to write comments that mention a directive by
name. The `COM:` directive makes it easy to do this. For example,
you might have:
```
; X32: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0
; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but
; COM: X64 will have something similar to X32:
; COM:
; COM: X64: pinsrd_1:
; COM: X64: pinsrd $1, %edi, %xmm0
```
Without this patch, you need to use some combination of rewording and
directive syntax mangling to prevent FileCheck from recognizing the
commented occurrences of `X32:` and `X64:` above as directives.
Moreover, FileCheck diagnostics have been proposed that might complain
about the occurrences of `X64` that don't have the trailing `:`
because they look like directive typos:
<http://lists.llvm.org/pipermail/llvm-dev/2020-April/140610.html>
I think dodging all these problems can prove tedious for test authors,
and directive syntax mangling already makes the purpose of existing
test code unclear. `COM:` can avoid all these problems.
This patch also updates the small set of existing tests that define
`COM` as a check prefix:
- clang/test/CodeGen/default-address-space.c
- clang/test/CodeGenOpenCL/addr-space-struct-arg.cl
- clang/test/Driver/hip-device-libs.hip
- llvm/test/Assembler/drop-debug-info-nonzero-alloca.ll
I think lit should support `COM:` as well. Perhaps `clang -verify`
should too.
Reviewed By: jhenderson, thopre
Differential Revision: https://reviews.llvm.org/D79276
2020-05-05 06:05:55 +08:00
|
|
|
// CHECK-LABEL: define i32 @test2(i32 %i)
|
|
|
|
// CHECK: %[[addr:.*]] = getelementptr
|
2017-06-20 01:03:41 +08:00
|
|
|
// CHECK: load i32, i32* %[[addr]]
|
2017-04-12 01:24:23 +08:00
|
|
|
// CHECK-NEXT: ret i32
|
|
|
|
int test2(int i) { return ban[i]; }
|
|
|
|
|
[FileCheck] Support comment directives
Sometimes you want to disable a FileCheck directive without removing
it entirely, or you want to write comments that mention a directive by
name. The `COM:` directive makes it easy to do this. For example,
you might have:
```
; X32: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0
; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but
; COM: X64 will have something similar to X32:
; COM:
; COM: X64: pinsrd_1:
; COM: X64: pinsrd $1, %edi, %xmm0
```
Without this patch, you need to use some combination of rewording and
directive syntax mangling to prevent FileCheck from recognizing the
commented occurrences of `X32:` and `X64:` above as directives.
Moreover, FileCheck diagnostics have been proposed that might complain
about the occurrences of `X64` that don't have the trailing `:`
because they look like directive typos:
<http://lists.llvm.org/pipermail/llvm-dev/2020-April/140610.html>
I think dodging all these problems can prove tedious for test authors,
and directive syntax mangling already makes the purpose of existing
test code unclear. `COM:` can avoid all these problems.
This patch also updates the small set of existing tests that define
`COM` as a check prefix:
- clang/test/CodeGen/default-address-space.c
- clang/test/CodeGenOpenCL/addr-space-struct-arg.cl
- clang/test/Driver/hip-device-libs.hip
- llvm/test/Assembler/drop-debug-info-nonzero-alloca.ll
I think lit should support `COM:` as well. Perhaps `clang -verify`
should too.
Reviewed By: jhenderson, thopre
Differential Revision: https://reviews.llvm.org/D79276
2020-05-05 06:05:55 +08:00
|
|
|
// CHECK-LABEL: define void @test3()
|
2017-07-08 21:24:52 +08:00
|
|
|
// CHECK: load i32*, i32** addrspacecast{{.*}} @B
|
2017-04-12 01:24:23 +08:00
|
|
|
// CHECK: load i32, i32*
|
2017-07-08 21:24:52 +08:00
|
|
|
// CHECK: load i32*, i32** addrspacecast{{.*}} @A
|
2017-04-12 01:24:23 +08:00
|
|
|
// CHECK: store i32 {{.*}}, i32*
|
|
|
|
void test3() {
|
|
|
|
*A = *B;
|
|
|
|
}
|
|
|
|
|
2020-02-04 02:09:39 +08:00
|
|
|
// CHECK-LABEL: define void @test4(i32* %a)
|
2017-07-05 12:58:24 +08:00
|
|
|
// CHECK: %[[alloca:.*]] = alloca i32*, align 8, addrspace(5)
|
2017-06-20 01:03:41 +08:00
|
|
|
// CHECK: %[[a_addr:.*]] = addrspacecast{{.*}} %[[alloca]] to i32**
|
|
|
|
// CHECK: store i32* %a, i32** %[[a_addr]]
|
|
|
|
// CHECK: %[[r0:.*]] = load i32*, i32** %[[a_addr]]
|
2017-04-12 01:24:23 +08:00
|
|
|
// CHECK: %[[arrayidx:.*]] = getelementptr inbounds i32, i32* %[[r0]]
|
|
|
|
// CHECK: store i32 0, i32* %[[arrayidx]]
|
|
|
|
void test4(int *a) {
|
|
|
|
a[0] = 0;
|
|
|
|
}
|