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