Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Mips / cconv / memory-layout.ll
blobdae4bfc2260901dae0cce248bb4aba28c74cd962
1 ; RUN: llc -march=mips < %s | FileCheck --check-prefixes=ALL,O32 %s
2 ; RUN: llc -march=mipsel < %s | FileCheck --check-prefixes=ALL,O32 %s
4 ; RUN-TODO: llc -march=mips64 -target-abi o32 < %s | FileCheck --check-prefixes=ALL,O32 %s
5 ; RUN-TODO: llc -march=mips64el -target-abi o32 < %s | FileCheck --check-prefixes=ALL,O32 %s
7 ; RUN: llc -march=mips64 -target-abi n32 < %s | FileCheck --check-prefixes=ALL,N32 %s
8 ; RUN: llc -march=mips64el -target-abi n32 < %s | FileCheck --check-prefixes=ALL,N32 %s
10 ; RUN: llc -march=mips64 -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
11 ; RUN: llc -march=mips64el -target-abi n64 < %s | FileCheck --check-prefixes=ALL,N64 %s
13 ; Test the memory layout for all ABI's and byte orders as specified by section
14 ; 4 of MD00305 (MIPS ABIs Described).
15 ; Bitfields are not covered since they are not available as a type in LLVM IR.
17 ; The assembly directives deal with endianness so we don't need to account for
18 ; that.
20 ; Deliberately request alignments that are too small for the target so we get
21 ; the minimum alignment instead of the preferred alignment.
22 @byte = global i8 1, align 1
23 @halfword = global i16 258, align 1
24 @word = global i32 16909060, align 1
25 @float = global float 1.0, align 1
26 @dword = global i64 283686952306183, align 1
27 @double = global double 1.0, align 1
28 @pointer = global ptr @byte
30 ; ALL-NOT:       .p2align
31 ; ALL-LABEL: byte:
32 ; ALL:           .byte 1
33 ; ALL:           .size byte, 1
35 ; ALL:           .p2align 1
36 ; ALL-LABEL: halfword:
37 ; ALL:           .2byte 258
38 ; ALL:           .size halfword, 2
40 ; ALL:           .p2align 2
41 ; ALL-LABEL: word:
42 ; ALL:           .4byte 16909060
43 ; ALL:           .size word, 4
45 ; ALL:           .p2align 2
46 ; ALL-LABEL: float:
47 ; ALL:           .4byte 0x3f800000
48 ; ALL:           .size float, 4
50 ; ALL:           .p2align 3
51 ; ALL-LABEL: dword:
52 ; ALL:           .8byte 283686952306183
53 ; ALL:           .size dword, 8
55 ; ALL:           .p2align 3
56 ; ALL-LABEL: double:
57 ; ALL:           .8byte 0x3ff0000000000000
58 ; ALL:           .size double, 8
60 ; O32:           .p2align 2
61 ; N32:           .p2align 2
62 ; N64:           .p2align 3
63 ; ALL-LABEL: pointer:
64 ; O32:           .4byte byte
65 ; O32:           .size pointer, 4
66 ; N32:           .4byte byte
67 ; N32:           .size pointer, 4
68 ; N64:           .8byte byte
69 ; N64:           .size pointer, 8
71 @byte_array = global [2 x i8] [i8 1, i8 2], align 1
72 @halfword_array = global [2 x i16] [i16 1, i16 2], align 1
73 @word_array = global [2 x i32] [i32 1, i32 2], align 1
74 @float_array = global [2 x float] [float 1.0, float 2.0], align 1
75 @dword_array = global [2 x i64] [i64 1, i64 2], align 1
76 @double_array = global [2 x double] [double 1.0, double 2.0], align 1
77 @pointer_array = global [2 x ptr] [ptr @byte, ptr @byte]
79 ; ALL-NOT:       .p2align
80 ; ALL-LABEL: byte_array:
81 ; ALL:           .ascii "\001\002"
82 ; ALL:           .size byte_array, 2
84 ; ALL:           .p2align 1
85 ; ALL-LABEL: halfword_array:
86 ; ALL:           .2byte 1
87 ; ALL:           .2byte 2
88 ; ALL:           .size halfword_array, 4
90 ; ALL:           .p2align 2
91 ; ALL-LABEL: word_array:
92 ; ALL:           .4byte 1
93 ; ALL:           .4byte 2
94 ; ALL:           .size word_array, 8
96 ; ALL:           .p2align 2
97 ; ALL-LABEL: float_array:
98 ; ALL:           .4byte 0x3f800000
99 ; ALL:           .4byte 0x40000000
100 ; ALL:           .size float_array, 8
102 ; ALL:           .p2align 3
103 ; ALL-LABEL: dword_array:
104 ; ALL:           .8byte 1
105 ; ALL:           .8byte 2
106 ; ALL:           .size dword_array, 16
108 ; ALL:           .p2align 3
109 ; ALL-LABEL: double_array:
110 ; ALL:           .8byte 0x3ff0000000000000
111 ; ALL:           .8byte 0x4000000000000000
112 ; ALL:           .size double_array, 16
114 ; O32:           .p2align 2
115 ; N32:           .p2align 2
116 ; N64:           .p2align 3
117 ; ALL-LABEL: pointer_array:
118 ; O32:           .4byte byte
119 ; O32:           .4byte byte
120 ; O32:           .size pointer_array, 8
121 ; N32:           .4byte byte
122 ; N32:           .4byte byte
123 ; N32:           .size pointer_array, 8
124 ; N64:           .8byte byte
125 ; N64:           .8byte byte
126 ; N64:           .size pointer_array, 16
128 %mixed = type { i8, double, i16 }
129 @mixed = global %mixed { i8 1, double 1.0, i16 515 }, align 1
131 ; ALL:           .p2align 3
132 ; ALL-LABEL: mixed:
133 ; ALL:           .byte 1
134 ; ALL:           .space 7
135 ; ALL:           .8byte 0x3ff0000000000000
136 ; ALL:           .2byte 515
137 ; ALL:           .space 6
138 ; ALL:           .size mixed, 24
140 ; Bitfields are not available in LLVM IR so we can't test them here.