157 lines · c
1// RUN: %clang_cc1 -triple loongarch32 -emit-llvm -O2 %s -o - | FileCheck %s2// RUN: %clang_cc1 -triple loongarch64 -emit-llvm -O2 %s -o - | FileCheck %s3 4/// Check GCC register names and alias can be used in register variable definition.5 6// CHECK-LABEL: @test_r07// CHECK-COUNT-2: call void asm sideeffect "", "{$r0}"(i32 undef)8// CHECK-NOT: call void asm sideeffect "", "{$r0}"(i32 undef)9void test_r0() {10 register int a asm ("$r0");11 register int b asm ("r0");12 asm ("" :: "r" (a));13 asm ("" :: "r" (b));14}15 16// CHECK-LABEL: @test_r1217// CHECK-COUNT-2: call void asm sideeffect "", "{$r12}"(i32 undef)18// CHECK-NOT: call void asm sideeffect "", "{$r12}"(i32 undef)19void test_r12() {20 register int a asm ("$r12");21 register int b asm ("r12");22 asm ("" :: "r" (a));23 asm ("" :: "r" (b));24}25 26// CHECK-LABEL: @test_r3127// CHECK-COUNT-2: call void asm sideeffect "", "{$r31}"(i32 undef)28// CHECK-NOT: call void asm sideeffect "", "{$r31}"(i32 undef)29void test_r31() {30 register int a asm ("$r31");31 register int b asm ("r31");32 asm ("" :: "r" (a));33 asm ("" :: "r" (b));34}35 36// CHECK-LABEL: @test_zero37// CHECK-COUNT-2: call void asm sideeffect "", "{$r0}"(i32 undef)38// CHECK-NOT: call void asm sideeffect "", "{$r0}"(i32 undef)39void test_zero() {40 register int a asm ("$zero");41 register int b asm ("zero");42 asm ("" :: "r" (a));43 asm ("" :: "r" (b));44}45 46// CHECK-LABEL: @test_a047// CHECK-COUNT-2: call void asm sideeffect "", "{$r4}"(i32 undef)48// CHECK-NOT: call void asm sideeffect "", "{$r4}"(i32 undef)49void test_a0() {50 register int a asm ("$a0");51 register int b asm ("a0");52 asm ("" :: "r" (a));53 asm ("" :: "r" (b));54}55 56// CHECK-LABEL: @test_t157// CHECK-COUNT-2: call void asm sideeffect "", "{$r13}"(i32 undef)58// CHECK-NOT: call void asm sideeffect "", "{$r13}"(i32 undef)59void test_t1() {60 register int a asm ("$t1");61 register int b asm ("t1");62 asm ("" :: "r" (a));63 asm ("" :: "r" (b));64}65 66// CHECK-LABEL: @test_fp67// CHECK-COUNT-2: call void asm sideeffect "", "{$r22}"(i32 undef)68// CHECK-NOT: call void asm sideeffect "", "{$r22}"(i32 undef)69void test_fp() {70 register int a asm ("$fp");71 register int b asm ("fp");72 asm ("" :: "r" (a));73 asm ("" :: "r" (b));74}75 76// CHECK-LABEL: @test_s277// CHECK-COUNT-2: call void asm sideeffect "", "{$r25}"(i32 undef)78// CHECK-NOT: call void asm sideeffect "", "{$r25}"(i32 undef)79void test_s2() {80 register int a asm ("$s2");81 register int b asm ("s2");82 asm ("" :: "r" (a));83 asm ("" :: "r" (b));84}85 86// CHECK-LABEL: @test_f087// CHECK-COUNT-2: call void asm sideeffect "", "{$f0}"(float undef)88// CHECK-NOT: call void asm sideeffect "", "{$f0}"(float undef)89void test_f0() {90 register float a asm ("$f0");91 register float b asm ("f0");92 asm ("" :: "f" (a));93 asm ("" :: "f" (b));94}95 96// CHECK-LABEL: @test_f1497// CHECK-COUNT-2: call void asm sideeffect "", "{$f14}"(float undef)98// CHECK-NOT: call void asm sideeffect "", "{$f14}"(float undef)99void test_f14() {100 register float a asm ("$f14");101 register float b asm ("f14");102 asm ("" :: "f" (a));103 asm ("" :: "f" (b));104}105 106// CHECK-LABEL: @test_f31107// CHECK-COUNT-2: call void asm sideeffect "", "{$f31}"(float undef)108// CHECK-NOT: call void asm sideeffect "", "{$f31}"(float undef)109void test_f31() {110 register float a asm ("$f31");111 register float b asm ("f31");112 asm ("" :: "f" (a));113 asm ("" :: "f" (b));114}115 116// CHECK-LABEL: @test_fa0117// CHECK-COUNT-2: call void asm sideeffect "", "{$f0}"(float undef)118// CHECK-NOT: call void asm sideeffect "", "{$f0}"(float undef)119void test_fa0() {120 register float a asm ("$fa0");121 register float b asm ("fa0");122 asm ("" :: "f" (a));123 asm ("" :: "f" (b));124}125 126// CHECK-LABEL: @test_ft1127// CHECK-COUNT-2: call void asm sideeffect "", "{$f9}"(float undef)128// CHECK-NOT: call void asm sideeffect "", "{$f9}"(float undef)129void test_ft1() {130 register float a asm ("$ft1");131 register float b asm ("ft1");132 asm ("" :: "f" (a));133 asm ("" :: "f" (b));134}135 136// CHECK-LABEL: @test_fs2137// CHECK-COUNT-2: call void asm sideeffect "", "{$f26}"(float undef)138// CHECK-NOT: call void asm sideeffect "", "{$f26}"(float undef)139void test_fs2() {140 register float a asm ("$fs2");141 register float b asm ("fs2");142 asm ("" :: "f" (a));143 asm ("" :: "f" (b));144}145 146// CHECK-LABEL: @test_fcc147// CHECK-COUNT-2: call void asm sideeffect "", "~{$fcc0}"()148// CHECK-NOT: call void asm sideeffect "", "~{$fcc0}"()149// CHECK-COUNT-2: call void asm sideeffect "", "~{$fcc7}"()150// CHECK-NOT: call void asm sideeffect "", "~{$fcc7}"()151void test_fcc() {152 asm ("" ::: "$fcc0");153 asm ("" ::: "fcc0");154 asm ("" ::: "$fcc7");155 asm ("" ::: "fcc7");156}157