62 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm-eabi -float-abi=soft -verify-machineinstrs < %s \3; RUN: | FileCheck --check-prefixes=ARM %s4; RUN: llc -mtriple=arm-eabi -float-abi=soft -verify-machineinstrs < %s \5; RUN: | FileCheck --check-prefixes=NOLIB %s6 7; Check Y = FNEG(X) -> Y = X ^ sign mask and no lib call is generated.8define void @test1(ptr %a, ptr %b) {9; ARM-LABEL: test1:10; ARM: @ %bb.0: @ %entry11; ARM-NEXT: ldr r1, [r1]12; ARM-NEXT: eor r1, r1, #-214748364813; ARM-NEXT: str r1, [r0]14; ARM-NEXT: mov pc, lr15; NOLIB-LABEL: test1:16; NOLIB: eor17; NOLIB-NOT: bl __aeabi_fsub18entry:19 %0 = load float, ptr %b20 %neg = fneg float %021 store float %neg, ptr %a22 ret void23}24 25define void @test2(ptr %a, ptr %b) {26; ARM-LABEL: test2:27; ARM: @ %bb.0: @ %entry28; ARM-NEXT: ldr r2, [r1]29; ARM-NEXT: ldr r1, [r1, #4]30; ARM-NEXT: str r2, [r0]31; ARM-NEXT: eor r1, r1, #-214748364832; ARM-NEXT: str r1, [r0, #4]33; ARM-NEXT: mov pc, lr34; NOLIB-LABEL: test2:35; NOLIB: eor36; NOLIB-NOT: bl __aeabi_dsub37entry:38 %0 = load double, ptr %b39 %neg = fneg double %040 store double %neg, ptr %a41 ret void42}43 44define void @test3(ptr %a, ptr %b) {45; ARM-LABEL: test3:46; ARM: @ %bb.0: @ %entry47; ARM-NEXT: ldm r1, {r2, r3, r12}48; ARM-NEXT: ldr r1, [r1, #12]49; ARM-NEXT: stm r0, {r2, r3, r12}50; ARM-NEXT: eor r1, r1, #-214748364851; ARM-NEXT: str r1, [r0, #12]52; ARM-NEXT: mov pc, lr53; NOLIB-LABEL: test3:54; NOLIB: eor55; NOLIB-NOT: bl __subtf356entry:57 %0 = load fp128, ptr %b58 %neg = fneg fp128 %059 store fp128 %neg, ptr %a60 ret void61}62