[clang] cc3a505 - [SelectionDAG] Fix assertion failure on inline asm register type mismatch (#166615)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 9 05:05:44 PST 2025
Author: Ahmed Nour
Date: 2025-11-09T21:05:40+08:00
New Revision: cc3a505b65d87480a553ba0850297e3b6abaf8f3
URL: https://github.com/llvm/llvm-project/commit/cc3a505b65d87480a553ba0850297e3b6abaf8f3
DIFF: https://github.com/llvm/llvm-project/commit/cc3a505b65d87480a553ba0850297e3b6abaf8f3.diff
LOG: [SelectionDAG] Fix assertion failure on inline asm register type mismatch (#166615)
Resolves https://github.com/llvm/llvm-project/issues/166057
---------
Co-authored-by: Phoebe Wang <phoebe.wang at intel.com>
Added:
Modified:
clang/lib/CodeGen/Targets/X86.cpp
clang/test/CodeGen/X86/mmx-inline-asm-error.c
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/Targets/X86.cpp b/clang/lib/CodeGen/Targets/X86.cpp
index 8daf8eb1d39f1..f9a84ecca074f 100644
--- a/clang/lib/CodeGen/Targets/X86.cpp
+++ b/clang/lib/CodeGen/Targets/X86.cpp
@@ -27,6 +27,14 @@ bool IsX86_MMXType(llvm::Type *IRType) {
static llvm::Type *X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
StringRef Constraint,
llvm::Type *Ty) {
+ bool IsMMXCons = llvm::StringSwitch<bool>(Constraint)
+ .Cases({"y", "&y", "^Ym"}, true)
+ .Default(false);
+ if (IsMMXCons && Ty->isVectorTy() &&
+ cast<llvm::VectorType>(Ty)->getPrimitiveSizeInBits().getFixedValue() !=
+ 64)
+ return nullptr; // Invalid MMX constraint
+
if (Constraint == "k") {
llvm::Type *Int1Ty = llvm::Type::getInt1Ty(CGF.getLLVMContext());
return llvm::FixedVectorType::get(Int1Ty, Ty->getScalarSizeInBits());
diff --git a/clang/test/CodeGen/X86/mmx-inline-asm-error.c b/clang/test/CodeGen/X86/mmx-inline-asm-error.c
index 1e2246176a117..8a2f991a537a2 100644
--- a/clang/test/CodeGen/X86/mmx-inline-asm-error.c
+++ b/clang/test/CodeGen/X86/mmx-inline-asm-error.c
@@ -1,13 +1,15 @@
// RUN: %clang_cc1 -verify -triple x86_64-unknown-unknown -emit-llvm-only %s
+// RUN: %clang_cc1 -verify=omp -triple x86_64-unknown-unknown -emit-llvm-only -fopenmp %s
typedef int vec256 __attribute__((ext_vector_type(8)));
vec256 foo(vec256 in) {
vec256 out;
asm("something %0" : : "y"(in)); // expected-error {{invalid input size for constraint 'y'}}
+ // omp-error at +1 {{invalid type 'vec256' (vector of 8 'int' values) in asm input for constraint 'y'}}
asm("something %0" : "=y"(out)); // expected-error {{invalid output size for constraint '=y'}}
+ // omp-error at +1 {{invalid type 'vec256' (vector of 8 'int' values) in asm input for constraint 'y'}}
asm("something %0, %0" : "+y"(out)); // expected-error {{invalid output size for constraint '+y'}}
return out;
}
-
More information about the cfe-commits
mailing list