brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 1d99d14 Raw
326 lines · plain
1//RUN: llvm-mc  -triple=aarch64-linux-gnu -print-imm-hex %s | FileCheck %s2 3//4// Check that large constants are converted to ldr from constant pool5//6// simple test7.section a, "ax", @progbits8// CHECK-LABEL: f1:9f1:10  ldr x0, =0x123411// CHECK: mov    x0, #0x123412  ldr w1, =0x456713// CHECK:  mov    w1, #0x456714  ldr x0, =0x1234000015// CHECK:  mov    x0, #0x1234000016  ldr w1, =0x4567000017// CHECK: mov    w1, #0x4567000018  ldr x0, =0xabc0000000019// CHECK: mov    x0, #0xabc0000000020  ldr x0, =0xbeef00000000000021// CHECK: mov    x0, #-0x411100000000000022 23.section b,"ax",@progbits24// CHECK-LABEL: f3:25f3:26  ldr w0, =0x1000127// CHECK: ldr w0, .Ltmp[[TMP0:[0-9]+]]28 29// loading multiple constants30.section c,"ax",@progbits31// CHECK-LABEL: f4:32f4:33  ldr w0, =0x1000234// CHECK: ldr w0, .Ltmp[[TMP1:[0-9]+]]35  adds x0, x0, #136  adds x0, x0, #137  adds x0, x0, #138  adds x0, x0, #139  ldr w0, =0x1000340// CHECK: ldr w0, .Ltmp[[TMP2:[0-9]+]]41  adds x0, x0, #142  adds x0, x0, #143 44// TODO: the same constants should have the same constant pool location45.section d,"ax",@progbits46// CHECK-LABEL: f5:47f5:48  ldr w0, =0x1000449// CHECK: ldr w0, .Ltmp[[TMP3:[0-9]+]]50  adds x0, x0, #151  adds x0, x0, #152  adds x0, x0, #153  adds x0, x0, #154  adds x0, x0, #155  adds x0, x0, #156  adds x0, x0, #157  ldr w0, =0x1000458// CHECK: ldr w0, .Ltmp[[TMP3:[0-9]+]]59  adds x0, x0, #160  adds x0, x0, #161  adds x0, x0, #162  adds x0, x0, #163  adds x0, x0, #164  adds x0, x0, #165 66// a section defined in multiple pieces should be merged and use a single constant pool67.section e,"ax",@progbits68// CHECK-LABEL: f6:69f6:70  ldr w0, =0x1000671// CHECK: ldr w0, .Ltmp[[TMP5:[0-9]+]]72  adds x0, x0, #173  adds x0, x0, #174  adds x0, x0, #175 76.section f, "ax", @progbits77// CHECK-LABEL: f7:78f7:79  adds x0, x0, #180  adds x0, x0, #181  adds x0, x0, #182 83.section e, "ax", @progbits84// CHECK-LABEL: f8:85f8:86  adds x0, x0, #187  ldr w0, =0x1000788// CHECK: ldr w0, .Ltmp[[TMP6:[0-9]+]]89  adds x0, x0, #190  adds x0, x0, #191 92//93// Check that symbols can be loaded using ldr pseudo94//95 96// load an undefined symbol97.section g,"ax",@progbits98// CHECK-LABEL: f9:99f9:100  ldr w0, =foo101// CHECK: ldr w0, .Ltmp[[TMP7:[0-9]+]]102 103// load a symbol from another section104.section h,"ax",@progbits105// CHECK-LABEL: f10:106f10:107  ldr w0, =f5108// CHECK: ldr w0, .Ltmp[[TMP8:[0-9]+]]109 110// load a symbol from the same section111.section i,"ax",@progbits112// CHECK-LABEL: f11:113f11:114  ldr w0, =f12115// CHECK: ldr w0, .Ltmp[[TMP9:[0-9]+]]116  ldr w0,=0x3C000117// CHECK: ldr     w0, .Ltmp[[TMP10:[0-9]+]]118 119// CHECK-LABEL: f12:120f12:121  adds x0, x0, #1122  adds x0, x0, #1123 124.section j,"ax",@progbits125// mix of symbols and constants126// CHECK-LABEL: f13:127f13:128  adds x0, x0, #1129  adds x0, x0, #1130  ldr w0, =0x101131// CHECK: mov w0, #0x101132  adds x0, x0, #1133  adds x0, x0, #1134  ldr w0, =bar135// CHECK: ldr w0, .Ltmp[[TMP11:[0-9]+]]136  adds x0, x0, #1137  adds x0, x0, #1138//139// Check for correct usage in other contexts140//141 142// usage in macro143.macro useit_in_a_macro144  ldr w0, =0x10008145  ldr w0, =baz146.endm147.section k,"ax",@progbits148// CHECK-LABEL: f14:149f14:150  useit_in_a_macro151// CHECK: ldr w0, .Ltmp[[TMP12:[0-9]+]]152// CHECK: ldr w0, .Ltmp[[TMP13:[0-9]+]]153 154// usage with expressions155.section l, "ax", @progbits156// CHECK-LABEL: f15:157f15:158  ldr w0, =0x10001+8159// CHECK: ldr w0, .Ltmp[[TMP14:[0-9]+]]160  adds x0, x0, #1161  ldr w0, =bar+4162// CHECK: ldr w0, .Ltmp[[TMP15:[0-9]+]]163  adds x0, x0, #1164 165// usage with 64-bit regs166.section m, "ax", @progbits167// CHECK-LABEL: f16:168f16:169  ldr x0, =0x0102030405060708170// CHECK: ldr x0, .Ltmp[[TMP16:[0-9]+]]171  add x0, x0, #1172  ldr w0, =bar173// CHECK: ldr w0, .Ltmp[[TMP17:[0-9]+]]174  ldr x0, =bar+16175// CHECK: ldr x0, .Ltmp[[TMP18:[0-9]+]]176  add x0, x0, #1177  ldr x0, =0x100000001178// CHECK: ldr x0, .Ltmp[[TMP19:[0-9]+]]179  ldr x1, =-0x80000001180// CHECK: ldr x1, .Ltmp[[TMP20:[0-9]+]]181  ldr x2, =0x10001182// CHECK: ldr x2, .Ltmp[[TMP21:[0-9]+]]183 184// check range for 32-bit regs185.section n, "ax", @progbits186// CHECK-LABEL: f17:187f17:188  ldr w0, =0xFFFFFFFF189// CHECK: ldr w0, .Ltmp[[TMP22:[0-9]+]]190  add w0, w0, #1191  ldr w1, =-0x7FFFFFFF192// CHECK: ldr w1, .Ltmp[[TMP23:[0-9]+]]193  add w0, w0, #1194  ldr w0, =-1195// CHECK: ldr w0, .Ltmp[[TMP24:[0-9]+]]196  add w0, w0, #1197 198// make sure the same contant uses different pools for 32- and 64-bit registers199.section o, "ax", @progbits200// CHECK-LABEL: f18:201f18:202  ldr w0, =0x320064203// CHECK: ldr w0, .Ltmp[[TMP25:[0-9]+]]204  add w0, w0, #1205  ldr x1, =0x320064206// CHECK: ldr x1, .Ltmp[[TMP26:[0-9]+]]207 208// We previously used a DenseMap with constant values as keys, check that209// sentinel values can be used.210  ldr x0, =0x7ffffffffffffffe211// CHECK: ldr x0, .Ltmp[[TMP27:[0-9]+]]212  ldr x1, =0x7fffffffffffffff213// CHECK: ldr x1, .Ltmp[[TMP28:[0-9]+]]214 215//216// Constant Pools217//218// CHECK: .section b,"ax",@progbits219// CHECK: .p2align 2220// CHECK: .Ltmp[[TMP0]]221// CHECK: .word 65537222 223// CHECK: .section c,"ax",@progbits224// CHECK: .p2align 2225// CHECK: .Ltmp[[TMP1]]226// CHECK: .word 65538227// CHECK: .p2align 2228// CHECK: .Ltmp[[TMP2]]229// CHECK: .word 65539230 231// CHECK: .section d,"ax",@progbits232// CHECK: .p2align 2233// CHECK: .Ltmp[[TMP3]]234// CHECK: .word 65540235 236// CHECK: .section e,"ax",@progbits237// CHECK: .p2align 2238// CHECK: .Ltmp[[TMP5]]239// CHECK: .word 65542240// CHECK: .p2align 2241// CHECK: .Ltmp[[TMP6]]242// CHECK: .word 65543243 244// Should not switch to section because it has no constant pool245// CHECK-NOT: .section f,"ax",@progbits246 247// CHECK: .section g,"ax",@progbits248// CHECK: .p2align 2249// CHECK: .Ltmp[[TMP7]]250// CHECK: .word foo251 252// CHECK: .section h,"ax",@progbits253// CHECK: .p2align 2254// CHECK: .Ltmp[[TMP8]]255// CHECK: .word f5256 257// CHECK: .section i,"ax",@progbits258// CHECK: .p2align 2259// CHECK: .Ltmp[[TMP9]]260// CHECK: .word f12261// CHECK: .p2align 2262// CHECK: .Ltmp[[TMP10]]263// CHECK: .word 245760264 265// CHECK: .section j,"ax",@progbits266// CHECK: .p2align 2267// CHECK: .Ltmp[[TMP11]]268// CHECK: .word bar269 270// CHECK: .section k,"ax",@progbits271// CHECK: .p2align 2272// CHECK: .Ltmp[[TMP12]]273// CHECK: .word 65544274// CHECK: .p2align 2275// CHECK: .Ltmp[[TMP13]]276// CHECK: .word baz277 278// CHECK: .section l,"ax",@progbits279// CHECK: .p2align 2280// CHECK: .Ltmp[[TMP14]]281// CHECK: .word 65545282// CHECK: .p2align 2283// CHECK: .Ltmp[[TMP15]]284// CHECK: .word bar+4285 286// CHECK: .section m,"ax",@progbits287// CHECK: .p2align 3288// CHECK: .Ltmp[[TMP16]]289// CHECK: .xword 72623859790382856290// CHECK: .p2align 2291// CHECK: .Ltmp[[TMP17]]292// CHECK: .word bar293// CHECK: .p2align 3294// CHECK: .Ltmp[[TMP18]]295// CHECK: .xword bar+16296// CHECK: .p2align 3297// CHECK: .Ltmp[[TMP19]]298// CHECK: .xword 4294967297299// CHECK: .p2align 3300// CHECK: .Ltmp[[TMP20]]301// CHECK: .xword -2147483649302// CHECK: .p2align 3303// CHECK: .Ltmp[[TMP21]]304// CHECK: .xword 65537305 306// CHECK: .section n,"ax",@progbits307// CHECK: .p2align 2308// CHECK: .Ltmp[[TMP22]]309// CHECK: .word 4294967295310// CHECK: .p2align 2311// CHECK: .Ltmp[[TMP23]]312// CHECK: .word -2147483647313// CHECK: .p2align 2314// CHECK: .Ltmp[[TMP24]]315// CHECK: .word -1316 317// CHECK: .section o,"ax",@progbits318// CHECK: .p2align 2319// CHECK: .Ltmp[[TMP25]]320// CHECK: .word 3276900321 322// CHECK: .Ltmp[[TMP27]]323// CHECK: .xword 9223372036854775806324// CHECK: .Ltmp[[TMP28]]325// CHECK: .xword 9223372036854775807326