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 <[email protected]> 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@+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@+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; } - _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
