diff options
Diffstat (limited to 'llvm/test/CodeGen')
-rw-r--r-- | llvm/test/CodeGen/AArch64/arm64-fp-imm-size.ll | 40 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/arm64-fp-imm.ll | 7 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/fpimm.ll | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/literal_pools_float.ll | 11 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/misched-fusion-lit.ll | 15 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/win_cst_pool.ll | 16 |
6 files changed, 83 insertions, 18 deletions
diff --git a/llvm/test/CodeGen/AArch64/arm64-fp-imm-size.ll b/llvm/test/CodeGen/AArch64/arm64-fp-imm-size.ll new file mode 100644 index 00000000000..c255537ee4c --- /dev/null +++ b/llvm/test/CodeGen/AArch64/arm64-fp-imm-size.ll @@ -0,0 +1,40 @@ +; RUN: llc < %s -mtriple=arm64-apple-darwin | FileCheck %s + +; CHECK: literal8 +; CHECK: .quad 4614256656552045848 +define double @foo() optsize { +; CHECK: _foo: +; CHECK: adrp x[[REG:[0-9]+]], lCPI0_0@PAGE +; CHECK: ldr d0, [x[[REG]], lCPI0_0@PAGEOFF] +; CHECK-NEXT: ret + ret double 0x400921FB54442D18 +} + +; CHECK: literal8 +; CHECK: .quad 137438953409 +define double @foo2() optsize { +; CHECK: _foo2: +; CHECK: adrp x[[REG:[0-9]+]], lCPI1_0@PAGE +; CHECK: ldr d0, [x[[REG]], lCPI1_0@PAGEOFF] +; CHECK-NEXT: ret + ret double 0x1FFFFFFFC1 +} + +define float @bar() optsize { +; CHECK: _bar: +; CHECK: adrp x[[REG:[0-9]+]], lCPI2_0@PAGE +; CHECK: ldr s0, [x[[REG]], lCPI2_0@PAGEOFF] +; CHECK-NEXT: ret + ret float 0x400921FB60000000 +} + +; CHECK: literal16 +; CHECK: .quad 0 +; CHECK: .quad 0 +define fp128 @baz() optsize { +; CHECK: _baz: +; CHECK: adrp x[[REG:[0-9]+]], lCPI3_0@PAGE +; CHECK: ldr q0, [x[[REG]], lCPI3_0@PAGEOFF] +; CHECK-NEXT: ret + ret fp128 0xL00000000000000000000000000000000 +} diff --git a/llvm/test/CodeGen/AArch64/arm64-fp-imm.ll b/llvm/test/CodeGen/AArch64/arm64-fp-imm.ll index 6e271e03d28..1921e9e1240 100644 --- a/llvm/test/CodeGen/AArch64/arm64-fp-imm.ll +++ b/llvm/test/CodeGen/AArch64/arm64-fp-imm.ll @@ -10,12 +10,11 @@ define double @foo() { ret double 0x400921FB54442D18 } -; CHECK: literal4 -; CHECK: .long 1078530011 define float @bar() { ; CHECK: _bar: -; CHECK: adrp x[[REG:[0-9]+]], lCPI1_0@PAGE -; CHECK: ldr s0, [x[[REG]], lCPI1_0@PAGEOFF] +; CHECK: mov [[REG:w[0-9]+]], #4059 +; CHECK: movk [[REG]], #16457, lsl #16 +; CHECK: fmov s0, [[REG]] ; CHECK-NEXT: ret ret float 0x400921FB60000000 } diff --git a/llvm/test/CodeGen/AArch64/fpimm.ll b/llvm/test/CodeGen/AArch64/fpimm.ll index a09d5d05de7..57b7841cd55 100644 --- a/llvm/test/CodeGen/AArch64/fpimm.ll +++ b/llvm/test/CodeGen/AArch64/fpimm.ll @@ -45,6 +45,13 @@ define void @check_double() { ; TINY-DAG: mov [[X128:x[0-9]+]], #4638707616191610880 ; TINY-DAG: fmov {{d[0-9]+}}, [[X128]] +; 64-bit ORR followed by MOVK. +; CHECK-DAG: mov [[XFP0:x[0-9]+]], #1082331758844 +; CHECK-DAG: movk [[XFP0]], #64764, lsl #16 +; CHECk-DAG: fmov {{d[0-9]+}}, [[XFP0]] + %newval3 = fadd double %val, 0xFCFCFC00FC + store volatile double %newval3, double* @varf64 + ; CHECK: ret ; TINY: ret ret void @@ -54,8 +61,9 @@ define void @check_double() { ; LARGE: mov [[REG:w[0-9]+]], #4059 ; LARGE-NEXT: movk [[REG]], #16457, lsl #16 ; LARGE-NEXT: fmov s0, [[REG]] -; TINY-LABEL: check_float2 -; TINY: ldr s0, .LCPI2_0 +; TINY-LABEL: check_float2 +; TINY: mov [[REG:w[0-9]+]], #4059 +; TINY-NEXT: movk [[REG]], #16457, lsl #16 define float @check_float2() { ret float 3.14159274101257324218750 } diff --git a/llvm/test/CodeGen/AArch64/literal_pools_float.ll b/llvm/test/CodeGen/AArch64/literal_pools_float.ll index 1a673949d7f..4031e072f1f 100644 --- a/llvm/test/CodeGen/AArch64/literal_pools_float.ll +++ b/llvm/test/CodeGen/AArch64/literal_pools_float.ll @@ -31,16 +31,19 @@ define void @floating_lits() { %doubleval = load double, double* @vardouble %newdouble = fadd double %doubleval, 129.0 -; CHECK: adrp x[[LITBASE:[0-9]+]], [[CURLIT:.LCPI[0-9]+_[0-9]+]] -; CHECK: ldr [[LIT129:d[0-9]+]], [x[[LITBASE]], {{#?}}:lo12:[[CURLIT]]] ; CHECK-NOFP-NOT: ldr {{d[0-9]+}}, +; CHECK: mov [[W129:x[0-9]+]], #35184372088832 +; CHECK: movk [[W129]], #16480, lsl #48 +; CHECK: fmov {{d[0-9]+}}, [[W129]] ; CHECK-NOFP-NOT: fadd -; CHECK-TINY: ldr [[LIT129:d[0-9]+]], [[CURLIT:.LCPI[0-9]+_[0-9]+]] +; CHECK-TINY: mov [[W129:x[0-9]+]], #35184372088832 +; CHECK-TINY: movk [[W129]], #16480, lsl #48 +; CHECK-TINY: fmov {{d[0-9]+}}, [[W129]] ; CHECK-NOFP-TINY-NOT: ldr {{d[0-9]+}}, ; CHECK-NOFP-TINY-NOT: fadd -; CHECK-LARGE: movz x[[LITADDR:[0-9]+]], #:abs_g0_nc:[[CURLIT:.LCPI[0-9]+_[0-9]+]] +; CHECK-LARGE: movz x[[LITADDR:[0-9]+]], #:abs_g0_nc:[[CURLIT:vardouble]] ; CHECK-LARGE: movk x[[LITADDR]], #:abs_g1_nc:[[CURLIT]] ; CHECK-LARGE: movk x[[LITADDR]], #:abs_g2_nc:[[CURLIT]] ; CHECK-LARGE: movk x[[LITADDR]], #:abs_g3:[[CURLIT]] diff --git a/llvm/test/CodeGen/AArch64/misched-fusion-lit.ll b/llvm/test/CodeGen/AArch64/misched-fusion-lit.ll index 49ae920d010..87d867b1c6f 100644 --- a/llvm/test/CodeGen/AArch64/misched-fusion-lit.ll +++ b/llvm/test/CodeGen/AArch64/misched-fusion-lit.ll @@ -46,3 +46,18 @@ entry: ; CHECKDONT-NEXT: add {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}} ; CHECKFUSE-NEXT: movk [[R]], {{#[0-9]+}}, lsl #48 } + +; Function Attrs: norecurse nounwind readnone +define double @litf() { +entry: + ret double 0x400921FB54442D18 + +; CHECK-LABEL: litf: +; CHECK-DONT: adrp [[ADDR:x[0-9]+]], [[CSTLABEL:.LCP.*]] +; CHECK-DONT-NEXT: ldr {{d[0-9]+}}, {{[[]}}[[ADDR]], :lo12:[[CSTLABEL]]{{[]]}} +; CHECK-FUSE: mov [[R:x[0-9]+]], #11544 +; CHECK-FUSE: movk [[R]], #21572, lsl #16 +; CHECK-FUSE: movk [[R]], #8699, lsl #32 +; CHECK-FUSE: movk [[R]], #16393, lsl #48 +; CHECK-FUSE: fmov {{d[0-9]+}}, [[R]] +} diff --git a/llvm/test/CodeGen/AArch64/win_cst_pool.ll b/llvm/test/CodeGen/AArch64/win_cst_pool.ll index f26e7aab3e5..c30ca4e6687 100644 --- a/llvm/test/CodeGen/AArch64/win_cst_pool.ll +++ b/llvm/test/CodeGen/AArch64/win_cst_pool.ll @@ -2,22 +2,22 @@ ; RUN: llc < %s -mtriple=aarch64-win32-gnu | FileCheck -check-prefix=MINGW %s define double @double() { - ret double 0x0000000000800001 + ret double 0x2000000000800001 } -; CHECK: .globl __real@0000000000800001 -; CHECK-NEXT: .section .rdata,"dr",discard,__real@0000000000800001 +; CHECK: .globl __real@2000000000800001 +; CHECK-NEXT: .section .rdata,"dr",discard,__real@2000000000800001 ; CHECK-NEXT: .p2align 3 -; CHECK-NEXT: __real@0000000000800001: -; CHECK-NEXT: .xword 8388609 +; CHECK-NEXT: __real@2000000000800001: +; CHECK-NEXT: .xword 2305843009222082561 ; CHECK: double: -; CHECK: adrp x8, __real@0000000000800001 -; CHECK-NEXT: ldr d0, [x8, __real@0000000000800001] +; CHECK: adrp x8, __real@2000000000800001 +; CHECK-NEXT: ldr d0, [x8, __real@2000000000800001] ; CHECK-NEXT: ret ; MINGW: .section .rdata,"dr" ; MINGW-NEXT: .p2align 3 ; MINGW-NEXT: [[LABEL:\.LC.*]]: -; MINGW-NEXT: .xword 8388609 +; MINGW-NEXT: .xword 2305843009222082561 ; MINGW: double: ; MINGW: adrp x8, [[LABEL]] ; MINGW-NEXT: ldr d0, [x8, [[LABEL]]] |