From 99f490ee1e8312922d0568c85772266752f0da70 Mon Sep 17 00:00:00 2001 From: Daniel Paoliello Date: Tue, 12 Aug 2025 12:21:06 -0700 Subject: [PATCH] [win][arm64ec] Expect Clang test that fail for AArch64 Windows to also fail for Arm64EC --- clang/test/CodeGen/c-strings.c | 6 ++++- clang/test/CodeGen/volatile-1.c | 45 ++++++++++++++++----------------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/clang/test/CodeGen/c-strings.c b/clang/test/CodeGen/c-strings.c index 988deee317d4c..12f7c4254b9f3 100644 --- a/clang/test/CodeGen/c-strings.c +++ b/clang/test/CodeGen/c-strings.c @@ -1,4 +1,3 @@ -// XFAIL: target=aarch64-pc-windows-{{.*}} // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=ITANIUM // RUN: %clang_cc1 -triple %ms_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=MSABI @@ -16,6 +15,11 @@ // MSABI: @f4.x = internal global %struct.s { ptr @"??_C@_05CJBACGMB@hello?$AA@" } // CHECK: @x = {{(dso_local )?}}global [3 x i8] c"ola", align [[ALIGN]] +// XFAIL: target=aarch64-pc-windows-{{.*}}, target=arm64ec-pc-windows-{{.*}} +// Arm64 aligns arrays to either 32-bit or 64-bit boundaries, which fails +// various checks above, since ALIGN is derived from the alignment of a single +// i8, which is still 1. + // XFAIL: target=hexagon-{{.*}} // Hexagon aligns arrays of size 8+ bytes to a 64-bit boundary, which // fails the check for "@f3.x = ... align [ALIGN]", since ALIGN is derived diff --git a/clang/test/CodeGen/volatile-1.c b/clang/test/CodeGen/volatile-1.c index 7116a4e1d03da..9d97d898400fe 100644 --- a/clang/test/CodeGen/volatile-1.c +++ b/clang/test/CodeGen/volatile-1.c @@ -1,4 +1,3 @@ -// XFAIL: target=aarch64-pc-windows-msvc // RUN: %clang_cc1 -Wno-return-type -Wno-unused-value -emit-llvm %s -w -o - | FileCheck %s // CHECK: @i = {{(dso_local )?}}global [[INT:i[0-9]+]] 0 @@ -27,44 +26,44 @@ int printf(const char *, ...); void test(void) { // CHECK: load volatile [[INT]], ptr @i i; - // CHECK-NEXT: load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: load volatile [[INT]], ptr @ci, align [[ALIGN:[0-9]+]] + // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP:[0-9]+]] // CHECK-NEXT: sitofp [[INT]] (float)(ci); - // CHECK-NEXT: load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] (void)ci; // CHECK-NEXT: memcpy (void)a; - // CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4 - // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: [[R:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] (void)(ci=ci); // CHECK-NEXT: [[T:%.*]] = load volatile [[INT]], ptr @j // CHECK-NEXT: store volatile [[INT]] [[T]], ptr @i (void)(i=j); - // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] // Not sure why they're ordered this way. // CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]] // CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]] - // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4 - // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] ci+=ci; - // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: [[R1:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I1:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] // CHECK-NEXT: [[R:%.*]] = add [[INT]] [[R2]], [[R1]] // CHECK-NEXT: [[I:%.*]] = add [[INT]] [[I2]], [[I1]] - // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align 4 - // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 - // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align 4 - // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align 4 + // CHECK-NEXT: store volatile [[INT]] [[R]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: store volatile [[INT]] [[I]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] + // CHECK-NEXT: [[R2:%.*]] = load volatile [[INT]], ptr @ci, align [[ALIGN]] + // CHECK-NEXT: [[I2:%.*]] = load volatile [[INT]], ptr getelementptr inbounds nuw ([[CINT]], ptr @ci, i32 0, i32 1), align [[ALIGN_GEP]] // These additions can be elided // CHECK-NEXT: add [[INT]] [[R]], [[R2]] // CHECK-NEXT: add [[INT]] [[I]], [[I2]]