Skip to content

Commit fc2146e

Browse files
authored
[win][arm64ec] Handle Arm64EC for Clang CodeGen tests that current XFAIL AArch64 Windows (#153255)
* `c-strings.c` - add an `XFAIL` for Arm64EC and add a comment to explain the failure. * `volatile-1.c` - add a regex for alignment during loads.
1 parent 2a82e23 commit fc2146e

File tree

2 files changed

+27
-24
lines changed

2 files changed

+27
-24
lines changed

clang/test/CodeGen/c-strings.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// XFAIL: target=aarch64-pc-windows-{{.*}}
21
// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=ITANIUM
32
// RUN: %clang_cc1 -triple %ms_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=MSABI
43

@@ -16,6 +15,11 @@
1615
// MSABI: @f4.x = internal global %struct.s { ptr @"??_C@_05CJBACGMB@hello?$AA@" }
1716
// CHECK: @x = {{(dso_local )?}}global [3 x i8] c"ola", align [[ALIGN]]
1817

18+
// XFAIL: target=aarch64-pc-windows-{{.*}}, target=arm64ec-pc-windows-{{.*}}
19+
// Arm64 aligns arrays to either 32-bit or 64-bit boundaries, which fails
20+
// various checks above, since ALIGN is derived from the alignment of a single
21+
// i8, which is still 1.
22+
1923
// XFAIL: target=hexagon-{{.*}}
2024
// Hexagon aligns arrays of size 8+ bytes to a 64-bit boundary, which
2125
// fails the check for "@f3.x = ... align [ALIGN]", since ALIGN is derived

clang/test/CodeGen/volatile-1.c

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// XFAIL: target=aarch64-pc-windows-msvc
21
// RUN: %clang_cc1 -Wno-return-type -Wno-unused-value -emit-llvm %s -w -o - | FileCheck %s
32

43
// CHECK: @i = {{(dso_local )?}}global [[INT:i[0-9]+]] 0
@@ -27,44 +26,44 @@ int printf(const char *, ...);
2726
void test(void) {
2827
// CHECK: load volatile [[INT]], ptr @i
2928
i;
30-
// CHECK-NEXT: load volatile [[INT]], ptr @ci, align 4
31-
// CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
29+
// CHECK-NEXT: load volatile [[INT]], ptr @ci, align [[ALIGN:[0-9]+]]
30+
// CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP:[0-9]+]]
3231
// CHECK-NEXT: sitofp [[INT]]
3332
(float)(ci);
34-
// CHECK-NEXT: load volatile [[INT]], ptr @ci, align 4
35-
// CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
33+
// CHECK-NEXT: load volatile [[INT]], ptr @ci, align [[ALIGN]]
34+
// CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
3635
(void)ci;
3736
// CHECK-NEXT: memcpy
3837
(void)a;
39-
// CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], ptr @ci, align 4
40-
// CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
41-
// CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4
42-
// CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
38+
// CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]]
39+
// CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
40+
// CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]]
41+
// CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
4342
(void)(ci=ci);
4443
// CHECK-NEXT: [[T:%.*]] = load volatile [[INT]], ptr @j
4544
// CHECK-NEXT: store volatile [[INT]] [[T]], ptr @i
4645
(void)(i=j);
47-
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align 4
48-
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
49-
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4
50-
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
46+
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]]
47+
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
48+
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]]
49+
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
5150
// Not sure why they're ordered this way.
5251
// CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]]
5352
// CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]]
54-
// CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4
55-
// CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
53+
// CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]]
54+
// CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
5655
ci+=ci;
5756

58-
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align 4
59-
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
60-
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4
61-
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
57+
// CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]]
58+
// CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
59+
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]]
60+
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
6261
// CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]]
6362
// CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]]
64-
// CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4
65-
// CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
66-
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4
67-
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4
63+
// CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]]
64+
// CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
65+
// CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]]
66+
// CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]]
6867
// These additions can be elided
6968
// CHECK-NEXT: add [[INT]] [[R]], [[R2]]
7069
// CHECK-NEXT: add [[INT]] [[I]], [[I2]]

0 commit comments

Comments
 (0)