// RUN: %clang_cc1 -triple loongarch32 -emit-llvm -O2 %s -o - | FileCheck %s // RUN: %clang_cc1 -triple loongarch64 -emit-llvm -O2 %s -o - | FileCheck %s /// Check GCC register names and alias can be used in register variable definition. // CHECK-LABEL: @test_r0 // CHECK: call void asm sideeffect "", "{$r0}"(i32 undef) void test_r0() { register int a asm ("$r0"); register int b asm ("r0"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_r12 // CHECK: call void asm sideeffect "", "{$r12}"(i32 undef) void test_r12() { register int a asm ("$r12"); register int b asm ("r12"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_r31 // CHECK: call void asm sideeffect "", "{$r31}"(i32 undef) void test_r31() { register int a asm ("$r31"); register int b asm ("r31"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_zero // CHECK: call void asm sideeffect "", "{$r0}"(i32 undef) void test_zero() { register int a asm ("$zero"); register int b asm ("zero"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_a0 // CHECK: call void asm sideeffect "", "{$r4}"(i32 undef) void test_a0() { register int a asm ("$a0"); register int b asm ("a0"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_t1 // CHECK: call void asm sideeffect "", "{$r13}"(i32 undef) void test_t1() { register int a asm ("$t1"); register int b asm ("t1"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_fp // CHECK: call void asm sideeffect "", "{$r22}"(i32 undef) void test_fp() { register int a asm ("$fp"); register int b asm ("fp"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_s2 // CHECK: call void asm sideeffect "", "{$r25}"(i32 undef) void test_s2() { register int a asm ("$s2"); register int b asm ("s2"); asm ("" :: "r" (a)); asm ("" :: "r" (b)); } // CHECK-LABEL: @test_f0 // CHECK: call void asm sideeffect "", "{$f0}"(float undef) void test_f0() { register float a asm ("$f0"); asm ("" :: "f" (a)); } // CHECK-LABEL: @test_f14 // CHECK: call void asm sideeffect "", "{$f14}"(float undef) void test_f14() { register float a asm ("$f14"); asm ("" :: "f" (a)); } // CHECK-LABEL: @test_f31 // CHECK: call void asm sideeffect "", "{$f31}"(float undef) void test_f31() { register float a asm ("$f31"); asm ("" :: "f" (a)); } // CHECK-LABEL: @test_fa0 // CHECK: call void asm sideeffect "", "{$f0}"(float undef) void test_fa0() { register float a asm ("$fa0"); asm ("" :: "f" (a)); } // CHECK-LABEL: @test_ft1 // CHECK: call void asm sideeffect "", "{$f9}"(float undef) void test_ft1() { register float a asm ("$ft1"); asm ("" :: "f" (a)); } // CHECK-LABEL: @test_fs2 // CHECK: call void asm sideeffect "", "{$f26}"(float undef) void test_fs2() { register float a asm ("$fs2"); asm ("" :: "f" (a)); } // CHECK-LABEL: @test_fcc // CHECK: call void asm sideeffect "", "~{$fcc0}"() // CHECK: call void asm sideeffect "", "~{$fcc7}"() void test_fcc() { asm ("" ::: "$fcc0"); asm ("" ::: "$fcc7"); }