Clang Project

clang_source_code/test/Driver/mips-abi.c
1// Check passing Mips ABI options to the backend.
2//
3// REQUIRES: mips-registered-target
4//
5// RUN: %clang -target mips-linux-gnu -### -c %s 2>&1 \
6// RUN:   | FileCheck -check-prefix=MIPS32R2-O32 %s
7// RUN: %clang -target mips64-linux-gnu -mips32r2 -mabi=32 -### -c %s 2>&1 \
8// RUN:   | FileCheck -check-prefix=MIPS32R2-O32 %s
9// MIPS32R2-O32: "-target-cpu" "mips32r2"
10// MIPS32R2-O32: "-target-abi" "o32"
11//
12// FIXME: This is a valid combination of options but we reject it at the moment
13//        because the backend can't handle it.
14// RUN: not %clang -target mips-linux-gnu -c %s \
15// RUN:        -march=mips64r2 -mabi=32 2>&1 \
16// RUN:   | FileCheck -check-prefix=MIPS64R2-O32 %s
17// MIPS64R2-O32: error: ABI 'o32' is not supported on CPU 'mips64r2'
18//
19// RUN: %clang -target mips64-linux-gnu -### -c %s 2>&1 \
20// RUN:   | FileCheck -check-prefix=MIPS64R2-N64 %s
21// RUN: %clang -target mips-img-linux-gnu -mips64r2 -### -c %s 2>&1 \
22// RUN:   | FileCheck -check-prefix=MIPS64R2-N64 %s
23// RUN: %clang -target mips-mti-linux-gnu -mips64r2 -### -c %s 2>&1 \
24// RUN:   | FileCheck -check-prefix=MIPS64R2-N64 %s
25// RUN: %clang -target mips-linux-gnu -mips64r2 -mabi=64 -### -c %s 2>&1 \
26// RUN:   | FileCheck -check-prefix=MIPS64R2-N64 %s
27// MIPS64R2-N64: "-target-cpu" "mips64r2"
28// MIPS64R2-N64: "-target-abi" "n64"
29//
30// RUN: %clang -target mips64-linux-gnu -### -mips64r3 -c %s 2>&1 \
31// RUN:   | FileCheck -check-prefix=MIPS64R3-N64 %s
32// RUN: %clang -target mips-img-linux-gnu -mips64r3 -### -c %s 2>&1 \
33// RUN:   | FileCheck -check-prefix=MIPS64R3-N64 %s
34// RUN: %clang -target mips-mti-linux-gnu -mips64r3 -### -c %s 2>&1 \
35// RUN:   | FileCheck -check-prefix=MIPS64R3-N64 %s
36// MIPS64R3-N64: "-target-cpu" "mips64r3"
37// MIPS64R3-N64: "-target-abi" "n64"
38//
39// RUN: %clang -target mips-linux-gnu -### -c %s \
40// RUN:        -mabi=32 2>&1 \
41// RUN:   | FileCheck -check-prefix=MIPS-ABI-32 %s
42// MIPS-ABI-32: "-target-cpu" "mips32r2"
43// MIPS-ABI-32: "-target-abi" "o32"
44//
45// RUN: %clang -target mips-linux-gnu -### -c %s \
46// RUN:        -mabi=o32 2>&1 \
47// RUN:   | FileCheck -check-prefix=MIPS-ABI-O32 %s
48// MIPS-ABI-O32: "-target-cpu" "mips32r2"
49// MIPS-ABI-O32: "-target-abi" "o32"
50//
51// RUN: %clang -target mips-linux-gnu -### -c %s \
52// RUN:        -mabi=n32 2>&1 \
53// RUN:   | FileCheck -check-prefix=MIPS-ABI-N32 %s
54// MIPS-ABI-N32: "-target-cpu" "mips64r2"
55// MIPS-ABI-N32: "-target-abi" "n32"
56//
57// RUN: %clang -target mips64-linux-gnu -### -c %s \
58// RUN:        -mabi=64 2>&1 \
59// RUN:   | FileCheck -check-prefix=MIPS-ABI-64 %s
60// MIPS-ABI-64: "-target-cpu" "mips64r2"
61// MIPS-ABI-64: "-target-abi" "n64"
62//
63// RUN: %clang -target mips64-linux-gnu -### -c %s \
64// RUN:        -mabi=n64 2>&1 \
65// RUN:   | FileCheck -check-prefix=MIPS-ABI-N64 %s
66// MIPS-ABI-N64: "-target-cpu" "mips64r2"
67// MIPS-ABI-N64: "-target-abi" "n64"
68//
69// RUN: not %clang -target mips64-linux-gnu -c %s \
70// RUN:        -mabi=o64 2>&1 \
71// RUN:   | FileCheck -check-prefix=MIPS-ABI-O64 %s
72// MIPS-ABI-O64: error: unknown target ABI 'o64'
73//
74// RUN: not %clang -target mips-linux-gnu -c %s \
75// RUN:        -mabi=unknown 2>&1 \
76// RUN:   | FileCheck -check-prefix=MIPS-ABI-UNKNOWN %s
77// MIPS-ABI-UNKNOWN: error: unknown target ABI 'unknown'
78//
79// RUN: %clang -target mips-linux-gnu -### -c %s \
80// RUN:        -march=mips1 2>&1 \
81// RUN:   | FileCheck -check-prefix=MIPS-ARCH-1 %s
82// MIPS-ARCH-1: "-target-cpu" "mips1"
83// MIPS-ARCH-1: "-target-abi" "o32"
84//
85// RUN: %clang -target mips-linux-gnu -### -c %s \
86// RUN:        -march=mips2 2>&1 \
87// RUN:   | FileCheck -check-prefix=MIPS-ARCH-2 %s
88// MIPS-ARCH-2: "-target-cpu" "mips2"
89// MIPS-ARCH-2: "-target-abi" "o32"
90//
91// RUN: %clang -target mips-linux-gnu -### -c %s \
92// RUN:        -march=mips3 2>&1 \
93// RUN:   | FileCheck -check-prefix=MIPS-ARCH-3 %s
94// MIPS-ARCH-3: "-target-cpu" "mips3"
95// MIPS-ARCH-3: "-target-abi" "o32"
96//
97// RUN: %clang -target mips-linux-gnu -### -c %s \
98// RUN:        -march=mips4 2>&1 \
99// RUN:   | FileCheck -check-prefix=MIPS-ARCH-4 %s
100// MIPS-ARCH-4: "-target-cpu" "mips4"
101// MIPS-ARCH-4: "-target-abi" "o32"
102//
103// RUN: %clang -target mips-linux-gnu -### -c %s \
104// RUN:        -march=mips5 2>&1 \
105// RUN:   | FileCheck -check-prefix=MIPS-ARCH-5 %s
106// MIPS-ARCH-5: "-target-cpu" "mips5"
107// MIPS-ARCH-5: "-target-abi" "o32"
108//
109// RUN: %clang -target mips-linux-gnu -### -c %s \
110// RUN:        -march=mips32 2>&1 \
111// RUN:   | FileCheck -check-prefix=MIPS-ARCH-32 %s
112// MIPS-ARCH-32: "-target-cpu" "mips32"
113// MIPS-ARCH-32: "-target-abi" "o32"
114//
115// RUN: %clang -target mips-linux-gnu -### -c %s \
116// RUN:        -march=mips32r2 2>&1 \
117// RUN:   | FileCheck -check-prefix=MIPS-ARCH-32R2 %s
118// MIPS-ARCH-32R2: "-target-cpu" "mips32r2"
119// MIPS-ARCH-32R2: "-target-abi" "o32"
120//
121// RUN: %clang -target mips-linux-gnu -### -c %s \
122// RUN:        -march=p5600 2>&1 \
123// RUN:   | FileCheck -check-prefix=MIPS-ARCH-P5600 %s
124// MIPS-ARCH-P5600: "-target-cpu" "p5600"
125// MIPS-ARCH-P5600: "-target-abi" "o32"
126//
127// RUN: not %clang -target mips-linux-gnu -c %s \
128// RUN:        -march=p5600 -mabi=64 2>&1 \
129// RUN:   | FileCheck -check-prefix=MIPS-ARCH-P5600-N64 %s
130// MIPS-ARCH-P5600-N64: error: ABI 'n64' is not supported on CPU 'p5600'
131//
132// RUN: %clang -target mips-linux-gnu -### -c %s \
133// RUN:        -march=mips64 2>&1 \
134// RUN:   | FileCheck -check-prefix=MIPS-ARCH-3264 %s
135// MIPS-ARCH-3264: "-target-cpu" "mips64"
136// MIPS-ARCH-3264: "-target-abi" "o32"
137//
138// RUN: %clang -target mips64-linux-gnu -### -c %s \
139// RUN:        -march=mips64 2>&1 \
140// RUN:   | FileCheck -check-prefix=MIPS-ARCH-64 %s
141// MIPS-ARCH-64: "-target-cpu" "mips64"
142// MIPS-ARCH-64: "-target-abi" "n64"
143//
144// RUN: %clang -target mips64-linux-gnu -### -c %s \
145// RUN:        -march=mips64r2 2>&1 \
146// RUN:   | FileCheck -check-prefix=MIPS-ARCH-64R2 %s
147// MIPS-ARCH-64R2: "-target-cpu" "mips64r2"
148// MIPS-ARCH-64R2: "-target-abi" "n64"
149//
150// RUN: %clang -target mips64-linux-gnu -### -c %s \
151// RUN:        -march=octeon 2>&1 \
152// RUN:   | FileCheck -check-prefix=MIPS-ARCH-OCTEON %s
153// MIPS-ARCH-OCTEON: "-target-cpu" "octeon"
154// MIPS-ARCH-OCTEON: "-target-abi" "n64"
155//
156// RUN: not %clang -target mips64-linux-gnu -c %s \
157// RUN:        -march=mips32 2>&1 \
158// RUN:   | FileCheck -check-prefix=MIPS-ARCH-6432 %s
159// MIPS-ARCH-6432: error: ABI 'n64' is not supported on CPU 'mips32'
160//
161// RUN: not %clang -target mips-linux-gnu -c %s \
162// RUN:        -march=unknown 2>&1 \
163// RUN:   | FileCheck -check-prefix=MIPS-ARCH-UNKNOWN %s
164// MIPS-ARCH-UNKNOWN: error: unknown target CPU 'unknown'
165
166// Check adjusting of target triple accordingly to `-mabi` option.
167// RUN: %clang -target mips64-linux-gnuabi64 -mabi=32 -### %s 2>&1 \
168// RUN:   | FileCheck -check-prefix=TARGET-O32 %s
169// TARGET-O32: "-triple" "mips-unknown-linux-gnu"
170// TARGET-O32: "-target-cpu" "mips32r2"
171// TARGET-O32: "-target-abi" "o32"
172// TARGET-O32: ld{{(.exe)?}}"
173// TARGET-O32: "-m" "elf32btsmip"
174
175// RUN: %clang -target mips-linux-gnu -mabi=n32 -### %s 2>&1 \
176// RUN:   | FileCheck -check-prefix=TARGET-N32 %s
177// TARGET-N32: "-triple" "mips64-unknown-linux-gnuabin32"
178// TARGET-N32: "-target-cpu" "mips64r2"
179// TARGET-N32: "-target-abi" "n32"
180// TARGET-N32: ld{{(.exe)?}}"
181// TARGET-N32: "-m" "elf32btsmipn32"
182
183// RUN: %clang -target mips-linux-gnu -mabi=64 -### %s 2>&1 \
184// RUN:   | FileCheck -check-prefix=TARGET-N64 %s
185// TARGET-N64: "-triple" "mips64-unknown-linux-gnuabi64"
186// TARGET-N64: "-target-cpu" "mips64r2"
187// TARGET-N64: "-target-abi" "n64"
188// TARGET-N64: ld{{(.exe)?}}"
189// TARGET-N64: "-m" "elf64btsmip"
190