[llvm] r284842 - [x86] add tests for potential negation folds

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 21 09:56:30 PDT 2016


Author: spatel
Date: Fri Oct 21 11:56:29 2016
New Revision: 284842

URL: http://llvm.org/viewvc/llvm-project?rev=284842&view=rev
Log:
[x86] add tests for potential negation folds

These are the backend equivalents for the tests added in r284627.
The patterns may emerge late, so we should have folds for these in the DAG too.

Added:
    llvm/trunk/test/CodeGen/X86/negate.ll

Added: llvm/trunk/test/CodeGen/X86/negate.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/negate.ll?rev=284842&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/negate.ll (added)
+++ llvm/trunk/test/CodeGen/X86/negate.ll Fri Oct 21 11:56:29 2016
@@ -0,0 +1,80 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
+
+define i32 @negate_nuw(i32 %x) {
+; CHECK-LABEL: negate_nuw:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    negl %edi
+; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    retq
+;
+  %neg = sub nuw i32 0, %x
+  ret i32 %neg
+}
+
+define <4 x i32> @negate_nuw_vec(<4 x i32> %x) {
+; CHECK-LABEL: negate_nuw_vec:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    pxor %xmm1, %xmm1
+; CHECK-NEXT:    psubd %xmm0, %xmm1
+; CHECK-NEXT:    movdqa %xmm1, %xmm0
+; CHECK-NEXT:    retq
+;
+  %neg = sub nuw <4 x i32> zeroinitializer, %x
+  ret <4 x i32> %neg
+}
+
+define i8 @negate_zero_or_minsigned_nsw(i8 %x) {
+; CHECK-LABEL: negate_zero_or_minsigned_nsw:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    andb $-128, %dil
+; CHECK-NEXT:    negb %dil
+; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    retq
+;
+  %signbit = and i8 %x, 128
+  %neg = sub nsw i8 0, %signbit
+  ret i8 %neg
+}
+
+define <4 x i32> @negate_zero_or_minsigned_nsw_vec(<4 x i32> %x) {
+; CHECK-LABEL: negate_zero_or_minsigned_nsw_vec:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    pslld $31, %xmm0
+; CHECK-NEXT:    pxor %xmm1, %xmm1
+; CHECK-NEXT:    psubd %xmm0, %xmm1
+; CHECK-NEXT:    movdqa %xmm1, %xmm0
+; CHECK-NEXT:    retq
+;
+  %signbit = shl <4 x i32> %x, <i32 31, i32 31, i32 31, i32 31>
+  %neg = sub nsw <4 x i32> zeroinitializer, %signbit
+  ret <4 x i32> %neg
+}
+
+define i8 @negate_zero_or_minsigned(i8 %x) {
+; CHECK-LABEL: negate_zero_or_minsigned:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    shlb $7, %dil
+; CHECK-NEXT:    negb %dil
+; CHECK-NEXT:    movl %edi, %eax
+; CHECK-NEXT:    retq
+;
+  %signbit = shl i8 %x, 7
+  %neg = sub i8 0, %signbit
+  ret i8 %neg
+}
+
+define <4 x i32> @negate_zero_or_minsigned_vec(<4 x i32> %x) {
+; CHECK-LABEL: negate_zero_or_minsigned_vec:
+; CHECK:       # BB#0:
+; CHECK-NEXT:    pand {{.*}}(%rip), %xmm0
+; CHECK-NEXT:    pxor %xmm1, %xmm1
+; CHECK-NEXT:    psubd %xmm0, %xmm1
+; CHECK-NEXT:    movdqa %xmm1, %xmm0
+; CHECK-NEXT:    retq
+;
+  %signbit = and <4 x i32> %x, <i32 2147483648, i32 2147483648, i32 2147483648, i32 2147483648>
+  %neg = sub <4 x i32> zeroinitializer, %signbit
+  ret <4 x i32> %neg
+}
+




More information about the llvm-commits mailing list