4 #![crate_type = "rlib"]
12 pub unsafe fn pure(x: i32) {
14 asm!("", out("ax") y, in("cx") x, options(pure, nomem));
17 // CHECK-LABEL: @noreturn
18 // CHECK: call void asm
19 // CHECK-NEXT: unreachable
21 pub unsafe fn noreturn() {
22 asm!("", options(noreturn));
25 pub static mut VAR: i32 = 0;
26 pub static mut DUMMY_OUTPUT: i32 = 0;
28 // CHECK-LABEL: @readonly
29 // CHECK: call i32 asm
32 pub unsafe fn readonly() -> i32 {
34 asm!("", out("ax") DUMMY_OUTPUT, options(pure, readonly));
38 // CHECK-LABEL: @not_readonly
39 // CHECK: call i32 asm
42 pub unsafe fn not_readonly() -> i32 {
44 asm!("", out("ax") DUMMY_OUTPUT, options());
48 // CHECK-LABEL: @nomem
50 // CHECK: call i32 asm
54 pub unsafe fn nomem() -> i32 {
56 asm!("", out("ax") DUMMY_OUTPUT, options(pure, nomem));
61 // CHECK-LABEL: @nomem_nopure
63 // CHECK: call i32 asm
67 pub unsafe fn nomem_nopure() -> i32 {
69 asm!("", out("ax") DUMMY_OUTPUT, options(nomem));
74 // CHECK-LABEL: @not_nomem
76 // CHECK: call i32 asm
80 pub unsafe fn not_nomem() -> i32 {
82 asm!("", out("ax") DUMMY_OUTPUT, options(pure, readonly));
87 // CHECK-LABEL: @dont_remove_nonpure
88 // CHECK: call void asm
89 // CHECK: call void asm
90 // CHECK: call void asm
93 pub unsafe fn dont_remove_nonpure() {
95 asm!("", options(nomem));
96 asm!("", options(readonly));
100 // CHECK: call void asm sideeffect inteldialect "{} {}", ""()
102 pub unsafe fn raw() {
103 asm!("{} {}", options(nostack, nomem, preserves_flags, raw));