[clang] [llvm] [CodeGen] Add support for multiple constraints (PR #195592)

Bill Wendling via cfe-commits cfe-commits at lists.llvm.org
Mon May 4 08:31:15 PDT 2026


================
@@ -0,0 +1,74 @@
+// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes=O0 %s
+// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm -O2 %s -o - | FileCheck --check-prefixes=O2 %s
+
+void test_1(unsigned long flags) {
+  // O0-LABEL: @test_1
+  // O0:         call void asm sideeffect "", "rm,~{dirflag},~{fpsr},~{flags}"(i32 %0)
+  //
+  // O2-LABEL: @test_1
+  // O2:         call void asm sideeffect "", "rm,~{dirflag},~{fpsr},~{flags}"(i32 %flags)
+  asm ("" : : "rm" (flags));
+}
+
+unsigned long test_2(void) {
+  // O0-LABEL: @test_2
+  // O0:         call void asm "", "=*rm,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) %out)
+  //
+  // O2-LABEL: @test_2
+  // O2:         %0 = tail call i32 asm "", "=rm,~{dirflag},~{fpsr},~{flags}"()
+  unsigned long out;
+  asm ("" : "=rm" (out));
+  return out;
+}
+
+void test_3(unsigned long flags) {
+  // O0-LABEL: @test_3
+  // O0:         call void asm sideeffect "", "imr,~{dirflag},~{fpsr},~{flags}"(i32 %0)
+  //
+  // O2-LABEL: @test_3
+  // O2:         call void asm sideeffect "", "imr,~{dirflag},~{fpsr},~{flags}"(i32 %flags)
+  asm ("" : : "g" (flags));
+}
+
+unsigned long test_4(void) {
+  // O0-LABEL: @test_4
+  // O0:         call void asm "", "=*imr,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) %out)
+  //
+  // O2-LABEL: @test_4
+  // O2:         %0 = tail call i32 asm "", "=imr,~{dirflag},~{fpsr},~{flags}"()
+  unsigned long out;
+  asm ("" : "=g" (out));
+  return out;
+}
+
+void test_5(int len) {
----------------
bwendling wrote:

Testcases don't normally have descriptive function names...

https://github.com/llvm/llvm-project/pull/195592


More information about the cfe-commits mailing list