| OLD | NEW |
| 1 ; Show that we handle constants in movw and mvt, when it isn't represented as | 1 ; Show that we handle constants in movw and mvt, when it isn't represented as |
| 2 ; ConstantRelocatable (see mov-imm.ll for the ConstantRelocatable case). | 2 ; ConstantRelocatable (see mov-imm.ll for the ConstantRelocatable case). |
| 3 | 3 |
| 4 ; REQUIRES: allow_dump | 4 ; REQUIRES: allow_dump |
| 5 | 5 |
| 6 ; Compile using standalone assembler. | 6 ; Compile using standalone assembler. |
| 7 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 \ | 7 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --args -Om1 \ |
| 8 ; RUN: --test-stack-extra 4084 | FileCheck %s --check-prefix=ASM | 8 ; RUN: --test-stack-extra 4084 | FileCheck %s --check-prefix=ASM |
| 9 | 9 |
| 10 ; Show bytes in assembled standalone code. | 10 ; Show bytes in assembled standalone code. |
| 11 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ | 11 ; RUN: %p2i --filetype=asm -i %s --target=arm32 --assemble --disassemble \ |
| 12 ; RUN: --args -Om1 --test-stack-extra 4084 | FileCheck %s --check-prefix=DIS | 12 ; RUN: --args -Om1 --test-stack-extra 4084 | FileCheck %s --check-prefix=DIS |
| 13 | 13 |
| 14 ; Compile using integrated assembler. | 14 ; Compile using integrated assembler. |
| 15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 \ | 15 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --args -Om1 \ |
| 16 ; RUN: --test-stack-extra 4084 | FileCheck %s --check-prefix=IASM | 16 ; RUN: --test-stack-extra 4084 | FileCheck %s --check-prefix=IASM |
| 17 | 17 |
| 18 ; Show bytes in assembled integrated code. | 18 ; Show bytes in assembled integrated code. |
| 19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \ | 19 ; RUN: %p2i --filetype=iasm -i %s --target=arm32 --assemble --disassemble \ |
| 20 ; RUN: --args -Om1 --test-stack-extra 4084 \ | 20 ; RUN: --args -Om1 --test-stack-extra 4084 \ |
| 21 ; RUN: | FileCheck %s --check-prefix=DIS | 21 ; RUN: | FileCheck %s --check-prefix=DIS |
| 22 | 22 |
| 23 define internal i32 @foo(i32 %x) { | 23 define internal i32 @foo(i32 %x) { |
| 24 entry: | 24 entry: |
| 25 | 25 |
| 26 ; ASM-LABEL: foo: | 26 ; ASM-LABEL: foo: |
| 27 ; DIS-LABEL: 00000000 <foo>: |
| 28 ; IASM-LABEL: foo: |
| 29 |
| 27 ; ASM-NEXT: .Lfoo$entry: | 30 ; ASM-NEXT: .Lfoo$entry: |
| 28 ; ******* Movw case to check ******* | |
| 29 ; ASM-NEXT: movw ip, #4092 | |
| 30 ; ASM-NEXT: sub sp, sp, ip | |
| 31 ; ASM-NEXT: str r0, [sp, #4088] | |
| 32 ; ASM-NEXT: # [sp, #4088] = def.pseudo | |
| 33 ; DIS-LABEL: 00000000 <foo>: | |
| 34 ; DIS-NEXT: 0: e300cffc | |
| 35 ; DIS-NEXT: 4: e04dd00c | |
| 36 ; DIS-NEXT: 8: e58d0ff8 | |
| 37 | |
| 38 ; IASM-LABEL: foo: | |
| 39 ; IASM-NEXT: .Lfoo$entry: | 31 ; IASM-NEXT: .Lfoo$entry: |
| 40 | 32 |
| 33 ; ASM-NEXT: movw ip, #4092 |
| 34 ; DIS-NEXT: 0: e300cffc |
| 41 ; IASM-NEXT: .byte 0xfc | 35 ; IASM-NEXT: .byte 0xfc |
| 42 ; IASM-NEXT: .byte 0xcf | 36 ; IASM-NEXT: .byte 0xcf |
| 43 ; IASM-NEXT: .byte 0x0 | 37 ; IASM-NEXT: .byte 0x0 |
| 44 ; IASM-NEXT: .byte 0xe3 | 38 ; IASM-NEXT: .byte 0xe3 |
| 45 | 39 |
| 40 ; ASM-NEXT: sub sp, sp, ip |
| 41 ; DIS-NEXT: 4: e04dd00c |
| 46 ; IASM-NEXT: .byte 0xc | 42 ; IASM-NEXT: .byte 0xc |
| 47 ; IASM-NEXT: .byte 0xd0 | 43 ; IASM-NEXT: .byte 0xd0 |
| 48 ; IASM-NEXT: .byte 0x4d | 44 ; IASM-NEXT: .byte 0x4d |
| 49 ; IASM-NEXT: .byte 0xe0 | 45 ; IASM-NEXT: .byte 0xe0 |
| 50 | 46 |
| 47 ; ASM-NEXT: str r0, [sp, #4088] |
| 48 ; DIS-NEXT: 8: e58d0ff8 |
| 51 ; IASM-NEXT: .byte 0xf8 | 49 ; IASM-NEXT: .byte 0xf8 |
| 52 ; IASM-NEXT: .byte 0xf | 50 ; IASM-NEXT: .byte 0xf |
| 53 ; IASM-NEXT: .byte 0x8d | 51 ; IASM-NEXT: .byte 0x8d |
| 54 ; IASM-NEXT: .byte 0xe5 | 52 ; IASM-NEXT: .byte 0xe5 |
| 55 | 53 |
| 54 ; ASM-NEXT: # [sp, #4088] = def.pseudo |
| 55 |
| 56 %mul = mul i32 %x, %x | 56 %mul = mul i32 %x, %x |
| 57 | 57 |
| 58 ; ASM-NEXT: ldr r0, [sp, #4088] | 58 ; ASM-NEXT: ldr r0, [sp, #4088] |
| 59 ; ASM-NEXT: ldr r1, [sp, #4088] | |
| 60 ; ASM-NEXT: mul r0, r0, r1 | |
| 61 ; ASM-NEXT: str r0, [sp, #4084] | |
| 62 ; ASM-NEXT: # [sp, #4084] = def.pseudo | |
| 63 | |
| 64 ; DIS-NEXT: c: e59d0ff8 | 59 ; DIS-NEXT: c: e59d0ff8 |
| 65 ; DIS-NEXT: 10: e59d1ff8 | |
| 66 ; DIS-NEXT: 14: e0000190 | |
| 67 ; DIS-NEXT: 18: e58d0ff4 | |
| 68 | |
| 69 ; IASM-NEXT: .byte 0xf8 | 60 ; IASM-NEXT: .byte 0xf8 |
| 70 ; IASM-NEXT: .byte 0xf | 61 ; IASM-NEXT: .byte 0xf |
| 71 ; IASM-NEXT: .byte 0x9d | 62 ; IASM-NEXT: .byte 0x9d |
| 72 ; IASM-NEXT: .byte 0xe5 | 63 ; IASM-NEXT: .byte 0xe5 |
| 73 | 64 |
| 65 ; ASM-NEXT: ldr r1, [sp, #4088] |
| 66 ; DIS-NEXT: 10: e59d1ff8 |
| 74 ; IASM-NEXT: .byte 0xf8 | 67 ; IASM-NEXT: .byte 0xf8 |
| 75 ; IASM-NEXT: .byte 0x1f | 68 ; IASM-NEXT: .byte 0x1f |
| 76 ; IASM-NEXT: .byte 0x9d | 69 ; IASM-NEXT: .byte 0x9d |
| 77 ; IASM-NEXT: .byte 0xe5 | 70 ; IASM-NEXT: .byte 0xe5 |
| 78 | 71 |
| 72 ; ASM-NEXT: mul r0, r0, r1 |
| 73 ; DIS-NEXT: 14: e0000190 |
| 79 ; IASM-NEXT: .byte 0x90 | 74 ; IASM-NEXT: .byte 0x90 |
| 80 ; IASM-NEXT: .byte 0x1 | 75 ; IASM-NEXT: .byte 0x1 |
| 81 ; IASM-NEXT: .byte 0x0 | 76 ; IASM-NEXT: .byte 0x0 |
| 82 ; IASM-NEXT: .byte 0xe0 | 77 ; IASM-NEXT: .byte 0xe0 |
| 83 | 78 |
| 79 ; ASM-NEXT: str r0, [sp, #4084] |
| 80 ; DIS-NEXT: 18: e58d0ff4 |
| 84 ; IASM-NEXT: .byte 0xf4 | 81 ; IASM-NEXT: .byte 0xf4 |
| 85 ; IASM-NEXT: .byte 0xf | 82 ; IASM-NEXT: .byte 0xf |
| 86 ; IASM-NEXT: .byte 0x8d | 83 ; IASM-NEXT: .byte 0x8d |
| 87 ; IASM-NEXT: .byte 0xe5 | 84 ; IASM-NEXT: .byte 0xe5 |
| 88 | 85 |
| 86 ; ASM-NEXT: # [sp, #4084] = def.pseudo |
| 87 |
| 89 ret i32 %mul | 88 ret i32 %mul |
| 90 | 89 |
| 91 ; ASM-NEXT: ldr r0, [sp, #4084] | 90 ; ASM-NEXT: ldr r0, [sp, #4084] |
| 92 ; ******* Movw case to check ******* | |
| 93 ; ASM-NEXT: movw ip, #4092 | |
| 94 ; ASM-NEXT: add sp, sp, ip | |
| 95 ; ASM-NEXT: bx lr | |
| 96 | |
| 97 ; DIS-NEXT: 1c: e59d0ff4 | 91 ; DIS-NEXT: 1c: e59d0ff4 |
| 98 ; DIS-NEXT: 20: e300cffc | |
| 99 ; DIS-NEXT: 24: e08dd00c | |
| 100 ; DIS-NEXT: 28: e12fff1e | |
| 101 | |
| 102 ; IASM-NEXT: .byte 0xf4 | 92 ; IASM-NEXT: .byte 0xf4 |
| 103 ; IASM-NEXT: .byte 0xf | 93 ; IASM-NEXT: .byte 0xf |
| 104 ; IASM-NEXT: .byte 0x9d | 94 ; IASM-NEXT: .byte 0x9d |
| 105 ; IASM-NEXT: .byte 0xe5 | 95 ; IASM-NEXT: .byte 0xe5 |
| 106 | 96 |
| 97 ; ASM-NEXT: movw ip, #4092 |
| 98 ; DIS-NEXT: 20: e300cffc |
| 107 ; IASM-NEXT: .byte 0xfc | 99 ; IASM-NEXT: .byte 0xfc |
| 108 ; IASM-NEXT: .byte 0xcf | 100 ; IASM-NEXT: .byte 0xcf |
| 109 ; IASM-NEXT: .byte 0x0 | 101 ; IASM-NEXT: .byte 0x0 |
| 110 ; IASM-NEXT: .byte 0xe3 | 102 ; IASM-NEXT: .byte 0xe3 |
| 111 | 103 |
| 104 ; ASM-NEXT: add sp, sp, ip |
| 105 ; DIS-NEXT: 24: e08dd00c |
| 112 ; IASM-NEXT: .byte 0xc | 106 ; IASM-NEXT: .byte 0xc |
| 113 ; IASM-NEXT: .byte 0xd0 | 107 ; IASM-NEXT: .byte 0xd0 |
| 114 ; IASM-NEXT: .byte 0x8d | 108 ; IASM-NEXT: .byte 0x8d |
| 115 ; IASM-NEXT: .byte 0xe0 | 109 ; IASM-NEXT: .byte 0xe0 |
| 116 | 110 |
| 111 ; ASM-NEXT: bx lr |
| 112 ; DIS-NEXT: 28: e12fff1e |
| 117 ; IASM-NEXT: .byte 0x1e | 113 ; IASM-NEXT: .byte 0x1e |
| 118 ; IASM-NEXT: .byte 0xff | 114 ; IASM-NEXT: .byte 0xff |
| 119 ; IASM-NEXT: .byte 0x2f | 115 ; IASM-NEXT: .byte 0x2f |
| 120 ; IASM-NEXT: .byte 0xe1 | 116 ; IASM-NEXT: .byte 0xe1 |
| 121 | 117 |
| 122 } | 118 } |
| 123 | 119 |
| 124 define internal void @saveMinus1(i32 %loc) { | 120 define internal void @saveConstI32(i32 %loc) { |
| 125 ; ASM-LABEL:saveMinus1: | 121 ; ASM-LABEL:saveConstI32: |
| 126 ; DIS-LABEL:00000030 <saveMinus1>: | 122 ; DIS-LABEL:00000030 <saveConstI32>: |
| 127 ; IASM-LABEL:saveMinus1: | 123 ; IASM-LABEL:saveConstI32: |
| 128 | 124 |
| 129 entry: | 125 entry: |
| 130 ; ASM-NEXT:.LsaveMinus1$entry: | 126 ; ASM-NEXT:.LsaveConstI32$entry: |
| 127 ; IASM-NEXT:.LsaveConstI32$entry: |
| 128 |
| 131 ; ASM-NEXT: movw ip, #4088 | 129 ; ASM-NEXT: movw ip, #4088 |
| 132 ; DIS-NEXT: 30: e300cff8 | 130 ; DIS-NEXT: 30: e300cff8 |
| 133 ; IASM-NEXT:.LsaveMinus1$entry: | 131 ; IASM-NEXT: .byte 0xf8 |
| 132 ; IASM-NEXT: .byte 0xcf |
| 133 ; IASM-NEXT: .byte 0x0 |
| 134 ; IASM-NEXT: .byte 0xe3 |
| 134 | 135 |
| 135 ; ASM-NEXT: sub sp, sp, ip | 136 ; ASM-NEXT: sub sp, sp, ip |
| 136 ; DIS-NEXT: 34: e04dd00c | 137 ; DIS-NEXT: 34: e04dd00c |
| 137 ; IASM-NEXT:» .byte 0xf8 | 138 ; IASM-NEXT: .byte 0xc |
| 138 ; IASM-NEXT:» .byte 0xcf | 139 ; IASM-NEXT: .byte 0xd0 |
| 139 ; IASM-NEXT:» .byte 0x0 | 140 ; IASM-NEXT: .byte 0x4d |
| 140 ; IASM-NEXT:» .byte 0xe3 | 141 ; IASM-NEXT: .byte 0xe0 |
| 141 | 142 |
| 142 ; ASM-NEXT: str r0, [sp, #4084] | 143 ; ASM-NEXT: str r0, [sp, #4084] |
| 143 ; ASM-NEXT: # [sp, #4084] = def.pseudo | 144 ; ASM-NEXT: # [sp, #4084] = def.pseudo |
| 144 ; DIS-NEXT: 38: e58d0ff4 | 145 ; DIS-NEXT: 38: e58d0ff4 |
| 145 ; IASM-NEXT:» .byte 0xc | 146 ; IASM-NEXT: .byte 0xf4 |
| 146 ; IASM-NEXT:» .byte 0xd0 | 147 ; IASM-NEXT: .byte 0xf |
| 147 ; IASM-NEXT:» .byte 0x4d | 148 ; IASM-NEXT: .byte 0x8d |
| 148 ; IASM-NEXT:» .byte 0xe0 | 149 ; IASM-NEXT: .byte 0xe5 |
| 149 | 150 |
| 150 %loc.asptr = inttoptr i32 %loc to i32* | 151 %loc.asptr = inttoptr i32 %loc to i32* |
| 151 store i32 -1, i32* %loc.asptr, align 1 | 152 store i32 524289, i32* %loc.asptr, align 1 |
| 152 | 153 |
| 153 ; ASM-NEXT: ldr r0, [sp, #4084] | 154 ; ASM-NEXT: ldr r0, [sp, #4084] |
| 154 ; DIS-NEXT: 3c: e59d0ff4 | 155 ; DIS-NEXT: 3c: e59d0ff4 |
| 155 ; IASM-NEXT:» .byte 0xf4 | 156 ; IASM-NEXT: .byte 0xf4 |
| 156 ; IASM-NEXT:» .byte 0xf | 157 ; IASM-NEXT: .byte 0xf |
| 157 ; IASM-NEXT:» .byte 0x8d | 158 ; IASM-NEXT: .byte 0x9d |
| 158 ; IASM-NEXT:» .byte 0xe5 | 159 ; IASM-NEXT: .byte 0xe5 |
| 159 | 160 |
| 160 ; ASM-NEXT: movw r1, #65535 | 161 ; ASM-NEXT: movw r1, #1 |
| 161 ; DIS-NEXT: 40: e30f1fff | 162 ; DIS-NEXT: 40: e3001001 |
| 162 ; IASM-NEXT:» .byte 0xf4 | 163 ; IASM-NEXT: .byte 0x1 |
| 163 ; IASM-NEXT:» .byte 0xf | 164 ; IASM-NEXT: .byte 0x10 |
| 164 ; IASM-NEXT:» .byte 0x9d | 165 ; IASM-NEXT: .byte 0x0 |
| 165 ; IASM-NEXT:» .byte 0xe5 | 166 ; IASM-NEXT: .byte 0xe3 |
| 166 | 167 |
| 167 ; ASM-NEXT: movt r1, #65535 | 168 ; ASM-NEXT: movt r1, #8 |
| 168 ; DIS-NEXT: 44: e34f1fff | 169 ; DIS-NEXT: 44: e3401008 |
| 169 ; IASM-NEXT:» .byte 0xff | 170 ; IASM-NEXT: .byte 0x8 |
| 170 ; IASM-NEXT:» .byte 0x1f | 171 ; IASM-NEXT: .byte 0x10 |
| 171 ; IASM-NEXT:» .byte 0xf | 172 ; IASM-NEXT: .byte 0x40 |
| 172 ; IASM-NEXT:» .byte 0xe3 | 173 ; IASM-NEXT: .byte 0xe3 |
| 173 | 174 |
| 174 ; ASM-NEXT: str r1, [r0] | 175 ; ASM-NEXT: str r1, [r0] |
| 175 ; DIS-NEXT: 48: e5801000 | 176 ; DIS-NEXT: 48: e5801000 |
| 176 ; IASM-NEXT:» .byte 0xff | 177 ; IASM-NEXT: .byte 0x0 |
| 177 ; IASM-NEXT:» .byte 0x1f | 178 ; IASM-NEXT: .byte 0x10 |
| 178 ; IASM-NEXT:» .byte 0x4f | 179 ; IASM-NEXT: .byte 0x80 |
| 179 ; IASM-NEXT:» .byte 0xe3 | 180 ; IASM-NEXT: .byte 0xe5 |
| 180 | 181 |
| 181 ret void | 182 ret void |
| 182 | 183 |
| 183 ; ASM-NEXT: movw ip, #4088 | 184 ; ASM-NEXT: movw ip, #4088 |
| 184 ; DIS-NEXT: 4c: e300cff8 | 185 ; DIS-NEXT: 4c: e300cff8 |
| 185 ; IASM-NEXT:» .byte 0x0 | 186 ; IASM-NEXT: .byte 0xf8 |
| 186 ; IASM-NEXT:» .byte 0x10 | 187 ; IASM-NEXT: .byte 0xcf |
| 187 ; IASM-NEXT:» .byte 0x80 | 188 ; IASM-NEXT: .byte 0x0 |
| 188 ; IASM-NEXT:» .byte 0xe5 | 189 ; IASM-NEXT: .byte 0xe3 |
| 189 | 190 |
| 190 ; ASM-NEXT: add sp, sp, ip | 191 ; ASM-NEXT: add sp, sp, ip |
| 191 ; DIS-NEXT: 50: e08dd00c | 192 ; DIS-NEXT: 50: e08dd00c |
| 192 ; IASM-NEXT:» .byte 0xf8 | 193 ; IASM-NEXT: .byte 0xc |
| 193 ; IASM-NEXT:» .byte 0xcf | 194 ; IASM-NEXT: .byte 0xd0 |
| 194 ; IASM-NEXT:» .byte 0x0 | 195 ; IASM-NEXT: .byte 0x8d |
| 195 ; IASM-NEXT:» .byte 0xe3 | 196 ; IASM-NEXT: .byte 0xe0 |
| 196 | 197 |
| 197 ; ASM-NEXT: bx lr | 198 ; ASM-NEXT: bx lr |
| 198 ; DIS-NEXT: 54: e12fff1e | 199 ; DIS-NEXT: 54: e12fff1e |
| 199 ; IASM-NEXT:» .byte 0xc | 200 ; IASM-NEXT: .byte 0x1e |
| 200 ; IASM-NEXT:» .byte 0xd0 | 201 ; IASM-NEXT: .byte 0xff |
| 201 ; IASM-NEXT:» .byte 0x8d | 202 ; IASM-NEXT: .byte 0x2f |
| 202 ; IASM-NEXT:» .byte 0xe0 | 203 ; IASM-NEXT: .byte 0xe1 |
| 203 | |
| 204 } | 204 } |
| OLD | NEW |