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

Reply via email to