aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGen/AArch64/fcopysign.ll
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2016-02-21 13:51:43 +0000
committerDimitry Andric <dim@FreeBSD.org>2016-02-21 13:51:43 +0000
commit3f4bde29a30d8c43db5cbe8f5541ebc5d1fdc6af (patch)
tree87140683fc3fee4e14b3c37e2aa7a4031d473f49 /test/CodeGen/AArch64/fcopysign.ll
parenta322a4af1fe8b989fe5d1bbc15de8736a26c03ca (diff)
Notes
Diffstat (limited to 'test/CodeGen/AArch64/fcopysign.ll')
-rw-r--r--test/CodeGen/AArch64/fcopysign.ll23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/CodeGen/AArch64/fcopysign.ll b/test/CodeGen/AArch64/fcopysign.ll
new file mode 100644
index 000000000000..6bda33cf76ef
--- /dev/null
+++ b/test/CodeGen/AArch64/fcopysign.ll
@@ -0,0 +1,23 @@
+; RUN: llc -o - %s | FileCheck %s
+; Check that selection dag legalization of fcopysign works in cases with
+; different modes for the arguments.
+target triple = "aarch64--"
+
+declare fp128 @llvm.copysign.f128(fp128, fp128)
+
+@val = global double zeroinitializer, align 8
+
+; CHECK-LABEL: copysign0
+; CHECK: ldr [[REG:x[0-9]+]], [x8, :lo12:val]
+; CHECK: and [[ANDREG:x[0-9]+]], [[REG]], #0x8000000000000000
+; CHECK: lsr x[[LSRREGNUM:[0-9]+]], [[ANDREG]], #56
+; CHECK: bfxil w[[LSRREGNUM]], w{{[0-9]+}}, #0, #7
+; CHECK: strb w[[LSRREGNUM]],
+; CHECK: ldr q{{[0-9]+}},
+define fp128 @copysign0() {
+entry:
+ %v = load double, double* @val, align 8
+ %conv = fpext double %v to fp128
+ %call = tail call fp128 @llvm.copysign.f128(fp128 0xL00000000000000007FFF000000000000, fp128 %conv) #2
+ ret fp128 %call
+}