Skip to content

[Clang] Remove 3-element vector load and store special handling #104661

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 21, 2025

Conversation

shiltian
Copy link
Contributor

@shiltian shiltian commented Aug 17, 2024

Clang uses a long-time special handling of the case where 3 element vector loads and stores are performed as 4 element, and then a shufflevector is used to extract the used elements. Odd sized vector codegen should now work reasonably well.

This patch removes the compiler argument -fpreserve-vec3-type and adds a target hook to determine if the special handling of vector type is needed.

@shiltian shiltian marked this pull request as ready for review August 17, 2024 03:50
Copy link
Contributor Author

shiltian commented Aug 17, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

@llvmbot llvmbot added clang Clang issues not falling into any other category backend:AMDGPU clang:frontend Language frontend issues, e.g. anything involving "Sema" clang:codegen IR generation bugs: mangling, exceptions, etc. labels Aug 17, 2024
@llvmbot
Copy link
Member

llvmbot commented Aug 17, 2024

@llvm/pr-subscribers-clang

@llvm/pr-subscribers-backend-amdgpu

Author: Shilei Tian (shiltian)

Changes

Clang uses a long-time special handling of the case where 3 element vector loads
and stores are performed as 4 element, and then a shufflevector is used to extract
the used elements. Odd sized vector codegen should now work reasonably well.

This patch removes this special handling, as well as the compiler argument
-fpreserve-vec3-type.


Patch is 20.50 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/104661.diff

11 Files Affected:

  • (modified) clang/include/clang/Basic/CodeGenOptions.def (-3)
  • (modified) clang/include/clang/Driver/Options.td (-4)
  • (modified) clang/lib/CodeGen/CGExpr.cpp (-35)
  • (modified) clang/test/CodeGen/alignment.c (+1-1)
  • (modified) clang/test/CodeGen/arm-abi-vector.c (+1-1)
  • (modified) clang/test/CodeGen/arm64-abi-vector.c (+1-2)
  • (modified) clang/test/CodeGen/builtins-elementwise-math.c (+5-8)
  • (modified) clang/test/CodeGenOpenCL/amdgpu-alignment.cl (+14-14)
  • (modified) clang/test/CodeGenOpenCL/preserve_vec3.cl (+1-1)
  • (modified) clang/test/CodeGenOpenCL/vectorLoadStore.cl (+2-1)
  • (modified) clang/test/CodeGenOpenCL/vector_literals.cl (+1-2)
diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def
index 09e892d6d4defe..cdd7b60caaf28d 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -405,9 +405,6 @@ CODEGENOPT(StrictReturn, 1, 1)
 /// Whether emit pseudo probes for sample pgo profile collection.
 CODEGENOPT(PseudoProbeForProfiling, 1, 0)
 
-/// Whether 3-component vector type is preserved.
-CODEGENOPT(PreserveVec3Type, 1, 0)
-
 CODEGENOPT(NoPLT, 1, 0)
 
 /// Whether to emit all vtables
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index cfd9e595c55178..f6486ebd6811b6 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -8026,10 +8026,6 @@ def fhlsl_strict_availability : Flag<["-"], "fhlsl-strict-availability">,
   Group<hlsl_Group>,
   MarshallingInfoFlag<LangOpts<"HLSLStrictAvailability">>;
 
-def fpreserve_vec3_type : Flag<["-"], "fpreserve-vec3-type">,
-  HelpText<"Preserve 3-component vector type">,
-  MarshallingInfoFlag<CodeGenOpts<"PreserveVec3Type">>,
-  ImpliedByAnyOf<[hlsl.KeyPath]>;
 def fwchar_type_EQ : Joined<["-"], "fwchar-type=">,
   HelpText<"Select underlying type for wchar_t">,
   Values<"char,short,int">,
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 48d9a3b8a5acb3..1027fcb4130cf1 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -1967,23 +1967,6 @@ llvm::Value *CodeGenFunction::EmitLoadOfScalar(Address Addr, bool Volatile,
 
       return EmitFromMemory(V, Ty);
     }
-
-    // Handle vectors of size 3 like size 4 for better performance.
-    const llvm::Type *EltTy = Addr.getElementType();
-    const auto *VTy = cast<llvm::FixedVectorType>(EltTy);
-
-    if (!CGM.getCodeGenOpts().PreserveVec3Type && VTy->getNumElements() == 3) {
-
-      llvm::VectorType *vec4Ty =
-          llvm::FixedVectorType::get(VTy->getElementType(), 4);
-      Address Cast = Addr.withElementType(vec4Ty);
-      // Now load value.
-      llvm::Value *V = Builder.CreateLoad(Cast, Volatile, "loadVec4");
-
-      // Shuffle vector to get vec3.
-      V = Builder.CreateShuffleVector(V, ArrayRef<int>{0, 1, 2}, "extractVec");
-      return EmitFromMemory(V, Ty);
-    }
   }
 
   // Atomic operations have to be done on integral types.
@@ -2111,24 +2094,6 @@ void CodeGenFunction::EmitStoreOfScalar(llvm::Value *Value, Address Addr,
       Addr = Addr.withPointer(Builder.CreateThreadLocalAddress(GV),
                               NotKnownNonNull);
 
-  llvm::Type *SrcTy = Value->getType();
-  if (const auto *ClangVecTy = Ty->getAs<VectorType>()) {
-    auto *VecTy = dyn_cast<llvm::FixedVectorType>(SrcTy);
-    if (!CGM.getCodeGenOpts().PreserveVec3Type) {
-      // Handle vec3 special.
-      if (VecTy && !ClangVecTy->isExtVectorBoolType() &&
-          cast<llvm::FixedVectorType>(VecTy)->getNumElements() == 3) {
-        // Our source is a vec3, do a shuffle vector to make it a vec4.
-        Value = Builder.CreateShuffleVector(Value, ArrayRef<int>{0, 1, 2, -1},
-                                            "extractVec");
-        SrcTy = llvm::FixedVectorType::get(VecTy->getElementType(), 4);
-      }
-      if (Addr.getElementType() != SrcTy) {
-        Addr = Addr.withElementType(SrcTy);
-      }
-    }
-  }
-
   Value = EmitToMemory(Value, Ty);
 
   LValue AtomicLValue =
diff --git a/clang/test/CodeGen/alignment.c b/clang/test/CodeGen/alignment.c
index b70297a3898979..b3bfce3c81f90e 100644
--- a/clang/test/CodeGen/alignment.c
+++ b/clang/test/CodeGen/alignment.c
@@ -45,7 +45,7 @@ void test3(packedfloat3 *p) {
   *p = (packedfloat3) { 3.2f, 2.3f, 0.1f };
 }
 // CHECK: @test3(
-// CHECK: store <4 x float> {{.*}}, align 4
+// CHECK: store <3 x float> {{.*}}, align 4
 // CHECK: ret void
 
 
diff --git a/clang/test/CodeGen/arm-abi-vector.c b/clang/test/CodeGen/arm-abi-vector.c
index c2a8902007980b..7f0cc4bcb0cd85 100644
--- a/clang/test/CodeGen/arm-abi-vector.c
+++ b/clang/test/CodeGen/arm-abi-vector.c
@@ -194,7 +194,7 @@ double varargs_vec_3s(int fixed, ...) {
 // APCS-GNU: [[VAR:%.*]] = alloca <3 x i16>, align 8
 // APCS-GNU: [[AP:%.*]] = load ptr,
 // APCS-GNU: [[AP_NEXT:%.*]] = getelementptr inbounds i8, ptr [[AP]], i32 8
-// APCS-GNU: [[VEC:%.*]] = load <4 x i16>, ptr [[AP]], align 4
+// APCS-GNU: [[VEC:%.*]] = load <3 x i16>, ptr [[AP]], align 4
 // ANDROID: varargs_vec_3s
 // ANDROID: alloca <3 x i16>, align 8
 // ANDROID: [[AP_ALIGN:%.*]] = call ptr @llvm.ptrmask.p0.i32(ptr {{%.*}}, i32 -8)
diff --git a/clang/test/CodeGen/arm64-abi-vector.c b/clang/test/CodeGen/arm64-abi-vector.c
index 81e42315c883bd..17dc3da8b8fbc2 100644
--- a/clang/test/CodeGen/arm64-abi-vector.c
+++ b/clang/test/CodeGen/arm64-abi-vector.c
@@ -415,8 +415,7 @@ double fixed_5i(__int5 *in) {
 
 __attribute__((noinline)) double args_vec_3d(int fixed, __double3 c3) {
   // CHECK: args_vec_3d
-  // CHECK: [[LOAD:%.*]] = load <4 x double>, ptr {{%.*}}
-  // CHECK: shufflevector <4 x double> [[LOAD]], <4 x double> poison, <3 x i32> <i32 0, i32 1, i32 2>
+  // CHECK: [[LOAD:%.*]] = load <3 x double>, ptr {{%.*}}
   double sum = fixed;
   sum = sum + c3.x + c3.y;
   return sum;
diff --git a/clang/test/CodeGen/builtins-elementwise-math.c b/clang/test/CodeGen/builtins-elementwise-math.c
index 8fb52992c0fe68..fe7942d1acab7d 100644
--- a/clang/test/CodeGen/builtins-elementwise-math.c
+++ b/clang/test/CodeGen/builtins-elementwise-math.c
@@ -343,7 +343,7 @@ void test_builtin_elementwise_min(float f1, float f2, double d1, double d2,
 void test_builtin_elementwise_bitreverse(si8 vi1, si8 vi2,
                                   long long int i1, long long int i2, short si,
                                   _BitInt(31) bi1, _BitInt(31) bi2) {
-  
+
 
   // CHECK:      [[I1:%.+]] = load i64, ptr %i1.addr, align 8
   // CHECK-NEXT: call i64 @llvm.bitreverse.i64(i64 [[I1]])
@@ -839,13 +839,10 @@ void test_builtin_elementwise_fma(float f32, double f64,
 
 
   // FIXME: Are we really still doing the 3 vector load workaround
-  // CHECK:      [[V3F64_LOAD_0:%.+]] = load <4 x double>, ptr %v3f64.addr
-  // CHECK-NEXT: [[V3F64_0:%.+]] = shufflevector
-  // CHECK-NEXT: [[V3F64_LOAD_1:%.+]] = load <4 x double>, ptr %v3f64.addr
-  // CHECK-NEXT: [[V3F64_1:%.+]] = shufflevector
-  // CHECK-NEXT: [[V3F64_LOAD_2:%.+]] = load <4 x double>, ptr %v3f64.addr
-  // CHECK-NEXT: [[V3F64_2:%.+]] = shufflevector
-    // CHECK-NEXT: call <3 x double> @llvm.fma.v3f64(<3 x double> [[V3F64_0]], <3 x double> [[V3F64_1]], <3 x double> [[V3F64_2]])
+  // CHECK:      [[V3F64_LOAD_0:%.+]] = load <3 x double>, ptr %v3f64.addr
+  // CHECK-NEXT: [[V3F64_LOAD_1:%.+]] = load <3 x double>, ptr %v3f64.addr
+  // CHECK-NEXT: [[V3F64_LOAD_2:%.+]] = load <3 x double>, ptr %v3f64.addr
+    // CHECK-NEXT: call <3 x double> @llvm.fma.v3f64(<3 x double> [[V3F64_LOAD_0]], <3 x double> [[V3F64_LOAD_1]], <3 x double> [[V3F64_LOAD_2]])
   v3f64 = __builtin_elementwise_fma(v3f64, v3f64, v3f64);
 
   // CHECK:      [[F64_0:%.+]] = load double, ptr %f64.addr
diff --git a/clang/test/CodeGenOpenCL/amdgpu-alignment.cl b/clang/test/CodeGenOpenCL/amdgpu-alignment.cl
index 8f57713fe1f041..52a5d01588875f 100644
--- a/clang/test/CodeGenOpenCL/amdgpu-alignment.cl
+++ b/clang/test/CodeGenOpenCL/amdgpu-alignment.cl
@@ -94,43 +94,43 @@ typedef double __attribute__((ext_vector_type(16))) double16;
 // CHECK-LABEL: @local_memory_alignment_global(
 // CHECK: store volatile i8 0, ptr addrspace(3) @local_memory_alignment_global.lds_i8, align 1
 // CHECK: store volatile <2 x i8> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2i8, align 2
-// CHECK: store volatile <4 x i8> <i8 0, i8 0, i8 0, i8 undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3i8, align 4
+// CHECK: store volatile <3 x i8> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3i8, align 4
 // CHECK: store volatile <4 x i8> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4i8, align 4
 // CHECK: store volatile <8 x i8> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8i8, align 8
 // CHECK: store volatile <16 x i8> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16i8, align 16
 // CHECK: store volatile i16 0, ptr addrspace(3) @local_memory_alignment_global.lds_i16, align 2
 // CHECK: store volatile <2 x i16> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2i16, align 4
-// CHECK: store volatile <4 x i16> <i16 0, i16 0, i16 0, i16 undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3i16, align 8
+// CHECK: store volatile <3 x i16> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3i16, align 8
 // CHECK: store volatile <4 x i16> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4i16, align 8
 // CHECK: store volatile <8 x i16> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8i16, align 16
 // CHECK: store volatile <16 x i16> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16i16, align 32
 // CHECK: store volatile i32 0, ptr addrspace(3) @local_memory_alignment_global.lds_i32, align 4
 // CHECK: store volatile <2 x i32> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2i32, align 8
-// CHECK: store volatile <4 x i32> <i32 0, i32 0, i32 0, i32 undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3i32, align 16
+// CHECK: store volatile <3 x i32> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3i32, align 16
 // CHECK: store volatile <4 x i32> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4i32, align 16
 // CHECK: store volatile <8 x i32> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8i32, align 32
 // CHECK: store volatile <16 x i32> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16i32, align 64
 // CHECK: store volatile i64 0, ptr addrspace(3) @local_memory_alignment_global.lds_i64, align 8
 // CHECK: store volatile <2 x i64> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2i64, align 16
-// CHECK: store volatile <4 x i64> <i64 0, i64 0, i64 0, i64 undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3i64, align 32
+// CHECK: store volatile <3 x i64> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3i64, align 32
 // CHECK: store volatile <4 x i64> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4i64, align 32
 // CHECK: store volatile <8 x i64> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8i64, align 64
 // CHECK: store volatile <16 x i64> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16i64, align 128
 // CHECK: store volatile half 0xH0000, ptr addrspace(3) @local_memory_alignment_global.lds_f16, align 2
 // CHECK: store volatile <2 x half> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2f16, align 4
-// CHECK: store volatile <4 x half> <half 0xH0000, half 0xH0000, half 0xH0000, half undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3f16, align 8
+// CHECK: store volatile <3 x half> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3f16, align 8
 // CHECK: store volatile <4 x half> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4f16, align 8
 // CHECK: store volatile <8 x half> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8f16, align 16
 // CHECK: store volatile <16 x half> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16f16, align 32
 // CHECK: store volatile float 0.000000e+00, ptr addrspace(3) @local_memory_alignment_global.lds_f32, align 4
 // CHECK: store volatile <2 x float> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2f32, align 8
-// CHECK: store volatile <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3f32, align 16
+// CHECK: store volatile <3 x float> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3f32, align 16
 // CHECK: store volatile <4 x float> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4f32, align 16
 // CHECK: store volatile <8 x float> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8f32, align 32
 // CHECK: store volatile <16 x float> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16f32, align 64
 // CHECK: store volatile double 0.000000e+00, ptr addrspace(3) @local_memory_alignment_global.lds_f64, align 8
 // CHECK: store volatile <2 x double> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v2f64, align 16
-// CHECK: store volatile <4 x double> <double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double undef>, ptr addrspace(3) @local_memory_alignment_global.lds_v3f64, align 32
+// CHECK: store volatile <3 x double> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v3f64, align 32
 // CHECK: store volatile <4 x double> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v4f64, align 32
 // CHECK: store volatile <8 x double> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v8f64, align 64
 // CHECK: store volatile <16 x double> zeroinitializer, ptr addrspace(3) @local_memory_alignment_global.lds_v16f64, align 128
@@ -381,43 +381,43 @@ kernel void local_memory_alignment_arg(
 
 // CHECK: store volatile i8 0, ptr addrspace(5) %arraydecay, align 1
 // CHECK: store volatile <2 x i8> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 2
-// CHECK: store volatile <4 x i8> <i8 0, i8 0, i8 0, i8 undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
+// CHECK: store volatile <3 x i8> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
 // CHECK: store volatile <4 x i8> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
 // CHECK: store volatile <8 x i8> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <16 x i8> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile i16 0, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 2
 // CHECK: store volatile <2 x i16> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
-// CHECK: store volatile <4 x i16> <i16 0, i16 0, i16 0, i16 undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
+// CHECK: store volatile <3 x i16> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <4 x i16> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <8 x i16> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile <16 x i16> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile i32 0, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
 // CHECK: store volatile <2 x i32> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
-// CHECK: store volatile <4 x i32> <i32 0, i32 0, i32 0, i32 undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
+// CHECK: store volatile <3 x i32> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile <4 x i32> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile <8 x i32> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile <16 x i32> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 64
 // CHECK: store volatile i64 0, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <2 x i64> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
-// CHECK: store volatile <4 x i64> <i64 0, i64 0, i64 0, i64 undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
+// CHECK: store volatile <3 x i64> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile <4 x i64> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile <8 x i64> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 64
 // CHECK: store volatile <16 x i64> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 128
 // CHECK: store volatile half 0xH0000, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 2
 // CHECK: store volatile <2 x half> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
-// CHECK: store volatile <4 x half> <half 0xH0000, half 0xH0000, half 0xH0000, half undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
+// CHECK: store volatile <3 x half> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <4 x half> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <8 x half> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile <16 x half> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile float 0.000000e+00, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 4
 // CHECK: store volatile <2 x float> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
-// CHECK: store volatile <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
+// CHECK: store volatile <3 x float> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile <4 x float> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
 // CHECK: store volatile <8 x float> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile <16 x float> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 64
 // CHECK: store volatile double 0.000000e+00, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 8
 // CHECK: store volatile <2 x double> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 16
-// CHECK: store volatile <4 x double> <double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double undef>, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
+// CHECK: store volatile <3 x double> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile <4 x double> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 32
 // CHECK: store volatile <8 x double> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 64
 // CHECK: store volatile <16 x double> zeroinitializer, ptr addrspace(5) %arraydecay{{[0-9]+}}, align 128
diff --git a/clang/test/CodeGenOpenCL/preserve_vec3.cl b/clang/test/CodeGenOpenCL/preserve_vec3.cl
index 19f0cdff60a9d6..8c89e1651edc11 100644
--- a/clang/test/CodeGenOpenCL/preserve_vec3.cl
+++ b/clang/test/CodeGenOpenCL/preserve_vec3.cl
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown -fpreserve-vec3-type | FileCheck %s
+// RUN: %clang_cc1 %s -emit-llvm -o - -triple spir-unknown-unknown | FileCheck %s
 
 typedef char char3 __attribute__((ext_vector_type(3)));
 typedef char char8 __attribute__((ext_vector_type(8)));
diff --git a/clang/test/CodeGenOpenCL/vectorLoadStore.cl b/clang/test/CodeGenOpenCL/vectorLoadStore.cl
index 7f8992929b4890..97f694788f7533 100644
--- a/clang/test/CodeGenOpenCL/vectorLoadStore.cl
+++ b/clang/test/CodeGenOpenCL/vectorLoadStore.cl
@@ -8,7 +8,8 @@ typedef float float4 __attribute((ext_vector_type(4)));
 // Check for optimized vec3 load/store which treats vec3 as vec4.
 void foo(char3 *P, char3 *Q) {
   *P = *Q;
-  // CHECK: %{{.*}} = shufflevector <4 x i8> %{{.*}}, <4 x i8> poison, <3 x i32> <i32 0, i32 1, i32 2>
+  // CHECK: %{{.*}} = load <3 x i8>, ptr addrspace(4) %{{.*}}, align 4
+  // CHECK: store <3 x i8> %{{.*}}, ptr addrspace(4) %{{.*}}, align 4
 }
 
 // CHECK: define{{.*}} spir_func void @alignment()
diff --git a/clang/test/CodeGenOpenCL/vector_literals.cl b/clang/test/CodeGenOpenCL/vector_literals.cl
index f69f339ca99aaf..efe240ade111ab 100644
--- a/clang/test/CodeGenOpenCL/vector_literals.cl
+++ b/clang/test/CodeGenOpenCL/vector_literals.cl
@@ -42,8 +42,7 @@ void vector_literals_valid() {
   //CHECK: shufflevector <4 x i32> %{{.+}}, <4 x i32> <i32 3, i32 3, i32 undef, i32 undef>, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
   int4 a_2_2 = (int4)((int2)(1, 2), (in...
[truncated]

@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from b9ccd96 to c422624 Compare December 13, 2024 05:35
@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch 3 times, most recently from e4b3028 to 69d4919 Compare December 13, 2024 14:00
@shiltian
Copy link
Contributor Author

gentle ping

@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch 2 times, most recently from 9e23538 to f01858b Compare December 17, 2024 03:18
@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from f01858b to 9dfb68d Compare December 30, 2024 03:37
@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from 9dfb68d to 76db8c6 Compare January 6, 2025 17:51
@shiltian
Copy link
Contributor Author

shiltian commented Jan 7, 2025

ping @arsenm @topperc

@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from 76db8c6 to e4759ca Compare January 7, 2025 18:37
@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from e4759ca to ac2bd8c Compare January 10, 2025 17:25
@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from ac2bd8c to 06bb0e1 Compare January 16, 2025 17:21
@shiltian
Copy link
Contributor Author

bump bump

@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from 06bb0e1 to 6899935 Compare January 17, 2025 15:56
Clang uses a long-time special handling of the case where  3 element vector loads
and stores are performed as 4 element, and then a shufflevector is used to extract
the used elements. Odd sized vector codegen should now work reasonably well.

This patch removes this special handling, as well as the compiler argument
`-fpreserve-vec3-type`.
@shiltian shiltian force-pushed the users/shiltian/no-3-vec-load-store-hack branch from 6899935 to 5729891 Compare January 17, 2025 16:02
shiltian and others added 2 commits January 21, 2025 09:17
@shiltian shiltian merged commit 03744d2 into main Jan 21, 2025
4 of 6 checks passed
@shiltian shiltian deleted the users/shiltian/no-3-vec-load-store-hack branch January 21, 2025 14:18
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jan 21, 2025

LLVM Buildbot has detected a new failure on builder llvm-clang-x86_64-win-fast running on as-builder-3 while building clang at step 6 "build-unified-tree".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/2/builds/15293

Here is the relevant piece of the build log for the reference
Step 6 (build-unified-tree) failure: build (failure)
...
[2580/4131] Building CXX object tools\clang\tools\clang-sycl-linker\CMakeFiles\clang-sycl-linker.dir\ClangSYCLLinker.cpp.obj
[2581/4131] Linking CXX static library lib\LLVMARMInfo.lib
[2582/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\ObjCRuntime.cpp.obj
[2583/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\Stack.cpp.obj
[2584/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\MakeSupport.cpp.obj
[2585/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\Sarif.cpp.obj
[2586/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\FileSystemStatCache.cpp.obj
[2587/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\Diagnostic.cpp.obj
[2588/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\ParsedAttrInfo.cpp.obj
[2589/4131] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExpr.cpp.obj
FAILED: tools/clang/lib/CodeGen/CMakeFiles/obj.clangCodeGen.dir/CGExpr.cpp.obj 
C:\ninja\ccache.exe C:\PROGRA~1\MICROS~2\2022\COMMUN~1\VC\Tools\MSVC\1438~1.331\bin\Hostx64\x64\cl.exe  /nologo /TP -DCLANG_BUILD_STATIC -DGTEST_HAS_RTTI=0 -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_HAS_EXCEPTIONS=0 -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -IC:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\build\tools\clang\lib\CodeGen -IC:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\lib\CodeGen -IC:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\include -IC:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\build\tools\clang\include -IC:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\build\include -IC:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\llvm\include /DWIN32 /D_WINDOWS   /Zc:inline /Zc:preprocessor /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -wd4251 -wd4275 -w14062 -we4238 /Gw /O2 /Ob2 /DNDEBUG -MD  /EHs-c- /GR- -std:c++17 /showIncludes /Fotools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExpr.cpp.obj /Fdtools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ /FS -c C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\lib\CodeGen\CGExpr.cpp
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2016): error C2039: 'iota': is not a member of 'std'
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\llvm\include\llvm/Support/Errc.h(87): note: see declaration of 'std'
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2016): error C3861: 'iota': identifier not found
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2156): error C2039: 'iota': is not a member of 'std'
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\llvm\include\llvm/Support/Errc.h(87): note: see declaration of 'std'
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2156): error C3861: 'iota': identifier not found
[2590/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\SanitizerSpecialCaseList.cpp.obj
[2591/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\FileEntry.cpp.obj
[2592/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\Sanitizers.cpp.obj
[2593/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\DiagnosticOptions.cpp.obj
[2594/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\FileManager.cpp.obj
[2595/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\SourceManager.cpp.obj
[2596/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\DarwinSDKInfo.cpp.obj
[2597/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\LangStandards.cpp.obj
[2598/4131] Linking CXX static library lib\LLVMBitReader.lib
[2599/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\SourceLocation.cpp.obj
[2600/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\StackExhaustionHandler.cpp.obj
[2601/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\SourceMgrAdapter.cpp.obj
[2602/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\NoSanitizeList.cpp.obj
[2603/4131] Linking CXX static library lib\LLVMCFGuard.lib
[2604/4131] Linking CXX static library lib\LLVMMCA.lib
[2605/4131] Linking CXX static library lib\LLVMFrontendHLSL.lib
[2606/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\TargetID.cpp.obj
[2607/4131] Linking CXX static library lib\LLVMAsmParser.lib
[2608/4131] Building CXX object tools\clang\lib\AST\CMakeFiles\obj.clangAST.dir\ByteCode\Compiler.cpp.obj
[2609/4131] Linking CXX executable bin\llvm-jitlink-executor.exe
[2610/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParseExprCXX.cpp.obj
[2611/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\DiagnosticIDs.cpp.obj
[2612/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParseObjc.cpp.obj
[2613/4131] Building CXX object tools\clang\lib\CrossTU\CMakeFiles\obj.clangCrossTU.dir\CrossTranslationUnit.cpp.obj
[2614/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParsePragma.cpp.obj
[2615/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParseOpenMP.cpp.obj
[2616/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParseStmt.cpp.obj
[2617/4131] Building CXX object lib\Object\CMakeFiles\LLVMObject.dir\IRSymtab.cpp.obj
[2618/4131] Building CXX object tools\clang\lib\Basic\CMakeFiles\obj.clangBasic.dir\LangOptions.cpp.obj
[2619/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParseExpr.cpp.obj
[2620/4131] Building CXX object tools\clang\lib\Parse\CMakeFiles\obj.clangParse.dir\ParseStmtAsm.cpp.obj

@llvm-ci
Copy link
Collaborator

llvm-ci commented Jan 21, 2025

LLVM Buildbot has detected a new failure on builder llvm-clang-x86_64-sie-win running on sie-win-worker while building clang at step 6 "build-unified-tree".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/46/builds/10790

Here is the relevant piece of the build log for the reference
Step 6 (build-unified-tree) failure: build (failure)
...
[3041/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ABIInfo.cpp.obj
[3042/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaFixItUtils.cpp.obj
[3043/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\Sema.cpp.obj
[3044/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaPPC.cpp.obj
[3045/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaDecl.cpp.obj
[3046/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaDeclObjC.cpp.obj
[3047/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaType.cpp.obj
[3048/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaDeclAttr.cpp.obj
[3049/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaExprObjC.cpp.obj
[3050/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExpr.cpp.obj
FAILED: tools/clang/lib/CodeGen/CMakeFiles/obj.clangCodeGen.dir/CGExpr.cpp.obj 
C:\bin\ccache.exe C:\PROGRA~2\MICROS~1\2019\BUILDT~1\VC\Tools\MSVC\1429~1.301\bin\HostX64\x64\cl.exe  /nologo /TP -DCLANG_BUILD_STATIC -DGTEST_HAS_RTTI=0 -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_GLIBCXX_ASSERTIONS -D_HAS_EXCEPTIONS=0 -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Itools\clang\lib\CodeGen -IZ:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\lib\CodeGen -IZ:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\include -Itools\clang\include -Iinclude -IZ:\b\llvm-clang-x86_64-sie-win\llvm-project\llvm\include /DWIN32 /D_WINDOWS   /Zc:inline /Zc:preprocessor /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -wd4251 -wd4275 -w14062 -we4238 /Gw /O2 /Ob2  -MD  /EHs-c- /GR- -UNDEBUG -std:c++17 /showIncludes /Fotools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExpr.cpp.obj /Fdtools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ /FS -c Z:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\lib\CodeGen\CGExpr.cpp
Z:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2016): error C2039: 'iota': is not a member of 'std'
Z:\b\llvm-clang-x86_64-sie-win\llvm-project\llvm\include\llvm/Support/Errc.h(87): note: see declaration of 'std'
Z:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2016): error C3861: 'iota': identifier not found
Z:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2156): error C2039: 'iota': is not a member of 'std'
Z:\b\llvm-clang-x86_64-sie-win\llvm-project\llvm\include\llvm/Support/Errc.h(87): note: see declaration of 'std'
Z:\b\llvm-clang-x86_64-sie-win\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2156): error C3861: 'iota': identifier not found
[3051/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaStmtAsm.cpp.obj
[3052/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGCoroutine.cpp.obj
[3053/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaTemplateInstantiateDecl.cpp.obj
[3054/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaOpenCL.cpp.obj
[3055/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGDecl.cpp.obj
[3056/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaConcept.cpp.obj
[3057/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaSystemZ.cpp.obj
[3058/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaRISCV.cpp.obj
[3059/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaLookup.cpp.obj
[3060/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaSwift.cpp.obj
[3061/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExprAgg.cpp.obj
[3062/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaSPIRV.cpp.obj
[3063/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaTemplateVariadic.cpp.obj
[3064/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGLoopInfo.cpp.obj
[3065/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaSYCL.cpp.obj
[3066/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaStmt.cpp.obj
[3067/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaExpr.cpp.obj
[3068/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGBlocks.cpp.obj
[3069/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGPointerAuth.cpp.obj
[3070/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGObjCMac.cpp.obj
[3071/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGDeclCXX.cpp.obj
[3072/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaExprCXX.cpp.obj
[3073/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExprCXX.cpp.obj
[3074/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaTemplate.cpp.obj
[3075/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGDebugInfo.cpp.obj
[3076/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGCUDARuntime.cpp.obj
[3077/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGRecordLayoutBuilder.cpp.obj
[3078/4807] Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaTemplateDeductionGuide.cpp.obj
[3079/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGOpenMPRuntime.cpp.obj
[3080/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ABIInfoImpl.cpp.obj
[3081/4807] Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGOpenCLRuntime.cpp.obj

@llvm-ci
Copy link
Collaborator

llvm-ci commented Jan 21, 2025

LLVM Buildbot has detected a new failure on builder lldb-remote-linux-win running on as-builder-10 while building clang at step 8 "build-default".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/197/builds/934

Here is the relevant piece of the build log for the reference
Step 8 (build-default) failure: cmake (failure)
...
155.775 [2064/130/3125]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaFunctionEffects.cpp.obj
155.809 [2063/130/3126]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaHLSL.cpp.obj
156.324 [2062/130/3127]Linking CXX static library lib\clangRewrite.lib
156.468 [2061/130/3128]Building CXX object tools\clang\lib\ASTMatchers\CMakeFiles\obj.clangASTMatchers.dir\ASTMatchFinder.cpp.obj
156.501 [2060/130/3129]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaStmtAttr.cpp.obj
156.728 [2059/130/3130]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaRISCV.cpp.obj
157.682 [2058/130/3131]Building CXX object tools\clang\lib\AST\CMakeFiles\obj.clangAST.dir\ASTContext.cpp.obj
159.896 [2057/130/3132]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaModule.cpp.obj
160.236 [2056/130/3133]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaExprMember.cpp.obj
160.514 [2055/130/3134]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExpr.cpp.obj
FAILED: tools/clang/lib/CodeGen/CMakeFiles/obj.clangCodeGen.dir/CGExpr.cpp.obj 
ccache C:\PROGRA~1\MICROS~1\2022\COMMUN~1\VC\Tools\MSVC\1441~1.341\bin\Hostx64\x64\cl.exe  /nologo /TP -DCLANG_BUILD_STATIC -DGTEST_HAS_RTTI=0 -DUNICODE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_GLIBCXX_ASSERTIONS -D_HAS_EXCEPTIONS=0 -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -IC:\buildbot\as-builder-10\lldb-x-aarch64\build\tools\clang\lib\CodeGen -IC:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\lib\CodeGen -IC:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\include -IC:\buildbot\as-builder-10\lldb-x-aarch64\build\tools\clang\include -IC:\buildbot\as-builder-10\lldb-x-aarch64\build\include -IC:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\llvm\include -D__OPTIMIZE__ /Zc:inline /Zc:preprocessor /Zc:__cplusplus /Oi /bigobj /permissive- /W4 -wd4141 -wd4146 -wd4244 -wd4267 -wd4291 -wd4351 -wd4456 -wd4457 -wd4458 -wd4459 -wd4503 -wd4624 -wd4722 -wd4100 -wd4127 -wd4512 -wd4505 -wd4610 -wd4510 -wd4702 -wd4245 -wd4706 -wd4310 -wd4701 -wd4703 -wd4389 -wd4611 -wd4805 -wd4204 -wd4577 -wd4091 -wd4592 -wd4319 -wd4709 -wd5105 -wd4324 -wd4251 -wd4275 -w14062 -we4238 /Gw /O2 /Ob2  -MD  /EHs-c- /GR- -UNDEBUG -std:c++17 /showIncludes /Fotools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExpr.cpp.obj /Fdtools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ /FS -c C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\lib\CodeGen\CGExpr.cpp
C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2016): error C2039: 'iota': is not a member of 'std'
C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\llvm\include\llvm/Support/Errc.h(87): note: see declaration of 'std'
C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2016): error C3861: 'iota': identifier not found
C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2156): error C2039: 'iota': is not a member of 'std'
C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\llvm\include\llvm/Support/Errc.h(87): note: see declaration of 'std'
C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\clang\lib\CodeGen\CGExpr.cpp(2156): error C3861: 'iota': identifier not found
161.620 [2055/129/3135]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaAvailability.cpp.obj
164.709 [2055/128/3136]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaCodeComplete.cpp.obj
165.332 [2055/127/3137]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaChecking.cpp.obj
165.544 [2055/126/3138]Building CXX object tools\clang\lib\AST\CMakeFiles\obj.clangAST.dir\TextNodeDumper.cpp.obj
166.704 [2055/125/3139]Building CXX object tools\clang\lib\AST\CMakeFiles\obj.clangAST.dir\ExprConstant.cpp.obj
168.623 [2055/124/3140]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaDeclObjC.cpp.obj
170.902 [2055/123/3141]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaExprObjC.cpp.obj
171.285 [2055/122/3142]Building CXX object tools\clang\lib\Driver\CMakeFiles\obj.clangDriver.dir\ToolChains\Arch\CSKY.cpp.obj
173.638 [2055/121/3143]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaObjC.cpp.obj
173.928 [2055/120/3144]Linking CXX executable bin\lld.exe
175.939 [2055/119/3145]Building CXX object tools\clang\lib\ARCMigrate\CMakeFiles\obj.clangARCMigrate.dir\PlistReporter.cpp.obj
178.068 [2055/118/3146]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\VarBypassDetector.cpp.obj
178.121 [2055/117/3147]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaStmtAsm.cpp.obj
182.108 [2055/116/3148]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGHLSLRuntime.cpp.obj
184.288 [2055/115/3149]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\SwiftCallingConv.cpp.obj
186.109 [2055/114/3150]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaOverload.cpp.obj
187.512 [2055/113/3151]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGCXX.cpp.obj
187.981 [2055/112/3152]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ABIInfo.cpp.obj
188.423 [2055/111/3153]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGExprCXX.cpp.obj
188.726 [2055/110/3154]Building CXX object tools\clang\lib\Sema\CMakeFiles\obj.clangSema.dir\SemaDeclAttr.cpp.obj
189.159 [2055/109/3155]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGCXXABI.cpp.obj
189.366 [2055/108/3156]Building CXX object tools\clang\lib\Driver\CMakeFiles\obj.clangDriver.dir\ToolChain.cpp.obj
190.667 [2055/107/3157]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\SanitizerMetadata.cpp.obj
190.735 [2055/106/3158]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ConstantInitBuilder.cpp.obj
191.350 [2055/105/3159]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\ABIInfoImpl.cpp.obj
193.154 [2055/104/3160]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\PatternInit.cpp.obj
193.371 [2055/103/3161]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGCUDARuntime.cpp.obj
195.046 [2055/102/3162]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\MacroPPCallbacks.cpp.obj
195.925 [2055/101/3163]Building CXX object tools\clang\lib\CodeGen\CMakeFiles\obj.clangCodeGen.dir\CGObjCRuntime.cpp.obj
196.352 [2055/100/3164]Building CXX object tools\clang\lib\Driver\CMakeFiles\obj.clangDriver.dir\ToolChains\Arch\AArch64.cpp.obj
196.756 [2055/99/3165]Building CXX object tools\clang\lib\Driver\CMakeFiles\obj.clangDriver.dir\ToolChains\Arch\ARM.cpp.obj

@shiltian
Copy link
Contributor Author

The compile error was resolved by 59dffce.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:AMDGPU clang:codegen IR generation bugs: mangling, exceptions, etc. clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants