1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=m68k < %s -o - | FileCheck %s
3
4; This function is primarily testing constant constraints that can NOT
5; be easily checked by Clang. For example, 'K' and 'M' are both
6; constraints for values that are outside certain numerical range.
7define void @constant_constraints() {
8; CHECK-LABEL: constant_constraints:
9; CHECK:         .cfi_startproc
10; CHECK-NEXT:  ; %bb.0: ; %entry
11; CHECK-NEXT:    ;APP
12; CHECK-NEXT:    move.l #1, %d1
13; CHECK-NEXT:    ;NO_APP
14; CHECK-NEXT:    ;APP
15; CHECK-NEXT:    move.l #8, %d1
16; CHECK-NEXT:    ;NO_APP
17; CHECK-NEXT:    ;APP
18; CHECK-NEXT:    move.l #-32768, %d1
19; CHECK-NEXT:    ;NO_APP
20; CHECK-NEXT:    ;APP
21; CHECK-NEXT:    move.l #32767, %d1
22; CHECK-NEXT:    ;NO_APP
23; CHECK-NEXT:    ;APP
24; CHECK-NEXT:    move.l #-129, %d1
25; CHECK-NEXT:    ;NO_APP
26; CHECK-NEXT:    ;APP
27; CHECK-NEXT:    move.l #128, %d1
28; CHECK-NEXT:    ;NO_APP
29; CHECK-NEXT:    ;APP
30; CHECK-NEXT:    move.l #-8, %d1
31; CHECK-NEXT:    ;NO_APP
32; CHECK-NEXT:    ;APP
33; CHECK-NEXT:    move.l #-1, %d1
34; CHECK-NEXT:    ;NO_APP
35; CHECK-NEXT:    ;APP
36; CHECK-NEXT:    move.l #-257, %d1
37; CHECK-NEXT:    ;NO_APP
38; CHECK-NEXT:    ;APP
39; CHECK-NEXT:    move.l #256, %d1
40; CHECK-NEXT:    ;NO_APP
41; CHECK-NEXT:    ;APP
42; CHECK-NEXT:    move.l #24, %d1
43; CHECK-NEXT:    ;NO_APP
44; CHECK-NEXT:    ;APP
45; CHECK-NEXT:    move.l #31, %d1
46; CHECK-NEXT:    ;NO_APP
47; CHECK-NEXT:    ;APP
48; CHECK-NEXT:    move.l #16, %d1
49; CHECK-NEXT:    ;NO_APP
50; CHECK-NEXT:    ;APP
51; CHECK-NEXT:    move.l #8, %d1
52; CHECK-NEXT:    ;NO_APP
53; CHECK-NEXT:    ;APP
54; CHECK-NEXT:    move.l #15, %d1
55; CHECK-NEXT:    ;NO_APP
56; CHECK-NEXT:    ;APP
57; CHECK-NEXT:    move.l #0, %d1
58; CHECK-NEXT:    ;NO_APP
59; CHECK-NEXT:    ;APP
60; CHECK-NEXT:    move.l #1, %d1
61; CHECK-NEXT:    ;NO_APP
62; CHECK-NEXT:    ;APP
63; CHECK-NEXT:    move.l #-32769, %d1
64; CHECK-NEXT:    ;NO_APP
65; CHECK-NEXT:    ;APP
66; CHECK-NEXT:    move.l #32768, %d1
67; CHECK-NEXT:    ;NO_APP
68; CHECK-NEXT:    rts
69entry:
70  call void asm sideeffect "move.l $0, %d1", "I"(i32 1)
71  call void asm sideeffect "move.l $0, %d1", "I"(i32 8)
72  call void asm sideeffect "move.l $0, %d1", "J"(i32 -32768)
73  call void asm sideeffect "move.l $0, %d1", "J"(i32 32767)
74  call void asm sideeffect "move.l $0, %d1", "K"(i32 -129)
75  call void asm sideeffect "move.l $0, %d1", "K"(i32 128)
76  call void asm sideeffect "move.l $0, %d1", "L"(i32 -8)
77  call void asm sideeffect "move.l $0, %d1", "L"(i32 -1)
78  call void asm sideeffect "move.l $0, %d1", "M"(i32 -257)
79  call void asm sideeffect "move.l $0, %d1", "M"(i32 256)
80  call void asm sideeffect "move.l $0, %d1", "N"(i32 24)
81  call void asm sideeffect "move.l $0, %d1", "N"(i32 31)
82  call void asm sideeffect "move.l $0, %d1", "O"(i32 16)
83  call void asm sideeffect "move.l $0, %d1", "P"(i32 8)
84  call void asm sideeffect "move.l $0, %d1", "P"(i32 15)
85  call void asm sideeffect "move.l $0, %d1", "^C0"(i32 0)
86  call void asm sideeffect "move.l $0, %d1", "^Ci"(i32 1)
87  call void asm sideeffect "move.l $0, %d1", "^Cj"(i32 -32769)
88  call void asm sideeffect "move.l $0, %d1", "^Cj"(i32 32768)
89  ret void
90}
91
92define void @register_constraints() {
93; CHECK-LABEL: register_constraints:
94; CHECK:         .cfi_startproc
95; CHECK-NEXT:  ; %bb.0: ; %entry
96; CHECK-NEXT:    suba.l #4, %sp
97; CHECK-NEXT:    .cfi_def_cfa_offset -8
98; CHECK-NEXT:    ;APP
99; CHECK-NEXT:    move.l #94, %d0
100; CHECK-NEXT:    ;NO_APP
101; CHECK-NEXT:    move.l %d0, (0,%sp)
102; CHECK-NEXT:    ;APP
103; CHECK-NEXT:    move.l #87, %d0
104; CHECK-NEXT:    ;NO_APP
105; CHECK-NEXT:    move.l %d0, (0,%sp)
106; CHECK-NEXT:    ;APP
107; CHECK-NEXT:    move.l #66, %a0
108; CHECK-NEXT:    ;NO_APP
109; CHECK-NEXT:    move.l %a0, (0,%sp)
110; CHECK-NEXT:    adda.l #4, %sp
111; CHECK-NEXT:    rts
112entry:
113  %out = alloca i32, align 4
114  %0 = call i32 asm sideeffect "move.l #94, $0", "=r"()
115  store i32 %0, i32* %out, align 4
116  %1 = call i32 asm sideeffect "move.l #87, $0", "=d"()
117  store i32 %1, i32* %out, align 4
118  %2 = call i32 asm sideeffect "move.l #66, $0", "=a"()
119  store i32 %2, i32* %out, align 4
120  ret void
121}
122
123