From 5a9210e651803b27c3865b80f353ba1a2c3aa2a6 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Tue, 20 Mar 2018 16:08:47 +0000 Subject: [PATCH] [AArch64] add fabs tests for PR36600; NFC llvm-svn: 327995 --- llvm/test/CodeGen/AArch64/fabs.ll | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 llvm/test/CodeGen/AArch64/fabs.ll diff --git a/llvm/test/CodeGen/AArch64/fabs.ll b/llvm/test/CodeGen/AArch64/fabs.ll new file mode 100644 index 0000000..0508fdd --- /dev/null +++ b/llvm/test/CodeGen/AArch64/fabs.ll @@ -0,0 +1,33 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s + +; FIXME: +; PR36600: https://bugs.llvm.org/show_bug.cgi?id=36600 +; This is not fabs. If X = -0.0, it should return -0.0 not 0.0. + +define double @not_fabs(double %x) #0 { +; CHECK-LABEL: not_fabs: +; CHECK: // %bb.0: +; CHECK-NEXT: fabs d0, d0 +; CHECK-NEXT: ret + %cmp = fcmp nnan ole double %x, 0.0 + %sub = fsub nnan double -0.0, %x + %cond = select i1 %cmp, double %sub, double %x + ret double %cond +} + +; Try again with different type, predicate, and compare constant. + +define float @still_not_fabs(float %x) #0 { +; CHECK-LABEL: still_not_fabs: +; CHECK: // %bb.0: +; CHECK-NEXT: fabs s0, s0 +; CHECK-NEXT: ret + %cmp = fcmp nnan oge float %x, -0.0 + %sub = fsub nnan float -0.0, %x + %cond = select i1 %cmp, float %x, float %sub + ret float %cond +} + +attributes #0 = { "no-nans-fp-math"="true" } + -- 2.7.4