brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.1 KiB · 9b41e38 Raw
107 lines · c
1// RUN: %clang_cc1 -triple riscv32-unknown-elf -target-feature +experimental-xsfmclic -emit-llvm -DCHECK_IR < %s| FileCheck %s2// RUN: %clang_cc1 -triple riscv64-unknown-elf -target-feature +experimental-xsfmclic -emit-llvm -DCHECK_IR < %s| FileCheck %s3// RUN: %clang_cc1 %s -triple riscv32-unknown-elf -target-feature +experimental-xsfmclic -verify=enabled,both -fsyntax-only4// RUN: %clang_cc1 %s -triple riscv64-unknown-elf -target-feature +experimental-xsfmclic -verify=enabled,both -fsyntax-only5// RUN: %clang_cc1 %s -triple riscv32-unknown-elf -verify=disabled,both -fsyntax-only6// RUN: %clang_cc1 %s -triple riscv64-unknown-elf -verify=disabled,both -fsyntax-only7// RUN: %clang_cc1 %s -triple riscv32-unknown-elf -target-feature -experimental-xsfmclic -verify=disabled,both -fsyntax-only8// RUN: %clang_cc1 %s -triple riscv64-unknown-elf -target-feature -experimental-xsfmclic -verify=disabled,both -fsyntax-only9 10#if defined(CHECK_IR)11// CHECK-LABEL:  @foo_stack_swap() #012// CHECK: ret void13__attribute__((interrupt("SiFive-CLIC-stack-swap"))) void foo_stack_swap(void) {}14 15// CHECK-LABEL:  @foo_preemptible() #116// CHECK: ret void17__attribute__((interrupt("SiFive-CLIC-preemptible"))) void foo_preemptible(void) {}18 19// CHECK-LABEL:  @foo_stack_swap_preemptible() #220// CHECK: ret void21__attribute__((interrupt("SiFive-CLIC-stack-swap", "SiFive-CLIC-preemptible")))22void foo_stack_swap_preemptible(void) {}23 24// CHECK-LABEL:  @foo_preemptible_stack_swap() #225// CHECK: ret void26__attribute__((interrupt("SiFive-CLIC-preemptible", "SiFive-CLIC-stack-swap")))27void foo_preemptible_stack_swap(void) {}28 29// CHECK-LABEL:  @foo_stack_swap_repeat() #030// CHECK: ret void31__attribute__((interrupt("SiFive-CLIC-stack-swap", "SiFive-CLIC-stack-swap")))32void foo_stack_swap_repeat(void) {}33 34// CHECK-LABEL:  @foo_preemptible_repeat() #135// CHECK: ret void36__attribute__((interrupt("SiFive-CLIC-preemptible", "SiFive-CLIC-preemptible")))37void foo_preemptible_repeat(void) {}38 39// CHECK-LABEL:  @foo_machine_stack_swap() #040// CHECK: ret void41__attribute__((interrupt("machine", "SiFive-CLIC-stack-swap")))42void foo_machine_stack_swap(void) {}43 44// CHECK-LABEL:  @foo_stack_swap_machine() #045// CHECK: ret void46__attribute__((interrupt("SiFive-CLIC-stack-swap", "machine")))47void foo_stack_swap_machine(void) {}48 49// CHECK-LABEL:  @foo_preemptible_machine() #150// CHECK: ret void51__attribute__((interrupt("SiFive-CLIC-preemptible", "machine")))52void foo_preemptible_machine(void) {}53 54// CHECK-LABEL:  @foo_machine_preemptible() #155// CHECK: ret void56__attribute__((interrupt("machine", "SiFive-CLIC-preemptible")))57void foo_machine_preemptible(void) {}58 59 60// CHECK: attributes #061// CHECK: "interrupt"="SiFive-CLIC-stack-swap"62// CHECK: attributes #163// CHECK: "interrupt"="SiFive-CLIC-preemptible"64// CHECK: attributes #265// CHECK: "interrupt"="SiFive-CLIC-preemptible-stack-swap"66#else67 68__attribute__((interrupt("SiFive-CLIC-stack-swap"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-stack-swap' requires extension 'XSfmclic'}}69__attribute__((interrupt("SiFive-CLIC-stack-swap", "SiFive-CLIC-stack-swap"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-stack-swap' requires extension 'XSfmclic'}}70__attribute__((interrupt("SiFive-CLIC-stack-swap", "machine"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-stack-swap' requires extension 'XSfmclic'}}71__attribute__((interrupt("machine", "SiFive-CLIC-stack-swap"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-stack-swap' requires extension 'XSfmclic'}}72 73__attribute__((interrupt("SiFive-CLIC-preemptible"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}74__attribute__((interrupt("SiFive-CLIC-preemptible", "SiFive-CLIC-preemptible"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}75__attribute__((interrupt("SiFive-CLIC-preemptible", "machine"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}76__attribute__((interrupt("machine", "SiFive-CLIC-preemptible"))) void foo15(void); // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}77 78__attribute__((interrupt("SiFive-CLIC-preemptible", "SiFive-CLIC-stack-swap"))) void foo16(void) {} // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}79__attribute__((interrupt("SiFive-CLIC-stack-swap", "SiFive-CLIC-preemptible"))) void foo17(void) {} // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-stack-swap' requires extension 'XSfmclic'}}80 81__attribute__((interrupt("machine", "machine", "SiFive-CLIC-preemptible"))) void foo24(void) {} // both-error {{'interrupt' attribute takes no more than 2 arguments}}82 83__attribute__((interrupt("SiFive-CLIC-preemptible", "supervisor"))) void foo27(void) {} // both-error {{RISC-V 'interrupt' attribute contains invalid combination of interrupt types}}84 85__attribute__((interrupt("supervisor", "SiFive-CLIC-stack-swap"))) void foo28(void) {} // both-error {{RISC-V 'interrupt' attribute contains invalid combination of interrupt types}}86 87__attribute__((interrupt("SiFive-CLIC-stack-swap", 1))) void foo29(void) {} // both-error {{expected string literal as argument of 'interrupt' attribute}}88 89__attribute__((interrupt(1, "SiFive-CLIC-stack-swap"))) void foo30(void) {} // both-error {{expected string literal as argument of 'interrupt' attribute}}90 91__attribute__((interrupt("SiFive-CLIC-stack-swap", "foo"))) void foo31(void) {} // both-warning {{'interrupt' attribute argument not supported: "foo"}}92 93__attribute__((interrupt("foo", "SiFive-CLIC-stack-swap"))) void foo32(void) {} // both-warning {{'interrupt' attribute argument not supported: "foo"}}94 95 96__attribute__((target("arch=+xsfmclic"))) __attribute__((interrupt("SiFive-CLIC-preemptible"))) void foo_sfmclic_preemptible(void) {}97__attribute__((target("arch=+xsfmclic"))) __attribute__((interrupt("SiFive-CLIC-stack-swap"))) void foo_sfmclic_stack_swap(void) {}98__attribute__((target("arch=+xsfmclic"))) __attribute__((interrupt("SiFive-CLIC-preemptible", "SiFive-CLIC-stack-swap"))) void foo_sfmclic_both(void) {}99 100// The attribute order is important, the interrupt attribute must come after the101// target attribute102__attribute__((interrupt("SiFive-CLIC-preemptible"))) __attribute__((target("arch=+xsfmclic"))) void foo_preemptible_sfmclic(void) {}  // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}103__attribute__((interrupt("SiFive-CLIC-stack-swap"))) __attribute__((target("arch=+xsfmclic"))) void fooc_stack_swap_sfmclic(void) {}  // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-stack-swap' requires extension 'XSfmclic'}}104__attribute__((interrupt("SiFive-CLIC-preemptible", "SiFive-CLIC-stack-swap"))) __attribute__((target("arch=+xsfmclic"))) void foo_both_sfmclic(void) {}  // disabled-error {{RISC-V 'interrupt' attribute 'SiFive-CLIC-preemptible' requires extension 'XSfmclic'}}105 106#endif107