xref: /llvm-project/clang/test/CodeGen/LoongArch/inline-asm-constraints.c (revision 04a65d62a0c67da0ee383c8f1d74dea6d8b83a7e)
1 // RUN: %clang_cc1 -triple loongarch32 -O2 -emit-llvm %s -o - | FileCheck %s
2 // RUN: %clang_cc1 -triple loongarch64 -O2 -emit-llvm %s -o - | FileCheck %s
3 
4 /// Test LoongArch specific inline assembly constraints.
5 
6 float f;
7 double d;
8 void test_f(void) {
9 // CHECK-LABEL: define{{.*}} void @test_f()
10 // CHECK: [[FLT_ARG:%[a-zA-Z_0-9]+]] = load float, ptr @f
11 // CHECK: call void asm sideeffect "", "f"(float [[FLT_ARG]])
12   asm volatile ("" :: "f"(f));
13 // CHECK: [[FLT_ARG:%[a-zA-Z_0-9]+]] = load double, ptr @d
14 // CHECK: call void asm sideeffect "", "f"(double [[FLT_ARG]])
15   asm volatile ("" :: "f"(d));
16 }
17 
18 void test_l(void) {
19 // CHECK-LABEL: define{{.*}} void @test_l()
20 // CHECK: call void asm sideeffect "", "l"(i32 32767)
21   asm volatile ("" :: "l"(32767));
22 // CHECK: call void asm sideeffect "", "l"(i32 -32768)
23   asm volatile ("" :: "l"(-32768));
24 }
25 
26 void test_I(void) {
27 // CHECK-LABEL: define{{.*}} void @test_I()
28 // CHECK: call void asm sideeffect "", "I"(i32 2047)
29   asm volatile ("" :: "I"(2047));
30 // CHECK: call void asm sideeffect "", "I"(i32 -2048)
31   asm volatile ("" :: "I"(-2048));
32 }
33 
34 void test_K(void) {
35 // CHECK-LABEL: define{{.*}} void @test_K()
36 // CHECK: call void asm sideeffect "", "K"(i32 4095)
37   asm volatile ("" :: "K"(4095));
38 // CHECK: call void asm sideeffect "", "K"(i32 0)
39   asm volatile ("" :: "K"(0));
40 }
41