blob: 8804460f38056cfaf2792f7c301e8ddaa9577c6f [file] [log] [blame]
Sanjay Patel5e7b7b72017-06-12 17:31:36 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Sanjay Patel7b4e4af2016-10-14 14:14:40 +00002; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=X64
3
4define i32 @neg_lshr_signbit(i32 %x) {
5; X64-LABEL: neg_lshr_signbit:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00006; X64: # %bb.0:
Sanjay Patel00fc7a62016-10-14 14:26:47 +00007; X64-NEXT: sarl $31, %edi
Sanjay Patel7b4e4af2016-10-14 14:14:40 +00008; X64-NEXT: movl %edi, %eax
9; X64-NEXT: retq
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000010 %sh = lshr i32 %x, 31
11 %neg = sub i32 0, %sh
12 ret i32 %neg
13}
14
15define i64 @neg_ashr_signbit(i64 %x) {
16; X64-LABEL: neg_ashr_signbit:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000017; X64: # %bb.0:
Sanjay Patel00fc7a62016-10-14 14:26:47 +000018; X64-NEXT: shrq $63, %rdi
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000019; X64-NEXT: movq %rdi, %rax
20; X64-NEXT: retq
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000021 %sh = ashr i64 %x, 63
22 %neg = sub i64 0, %sh
23 ret i64 %neg
24}
25
26define <4 x i32> @neg_ashr_signbit_vec(<4 x i32> %x) {
27; X64-LABEL: neg_ashr_signbit_vec:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000028; X64: # %bb.0:
Sanjay Patel00fc7a62016-10-14 14:26:47 +000029; X64-NEXT: psrld $31, %xmm0
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000030; X64-NEXT: retq
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000031 %sh = ashr <4 x i32> %x, <i32 31, i32 31, i32 31, i32 31>
32 %neg = sub <4 x i32> zeroinitializer, %sh
33 ret <4 x i32> %neg
34}
35
36define <8 x i16> @neg_lshr_signbit_vec(<8 x i16> %x) {
37; X64-LABEL: neg_lshr_signbit_vec:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000038; X64: # %bb.0:
Sanjay Patel00fc7a62016-10-14 14:26:47 +000039; X64-NEXT: psraw $15, %xmm0
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000040; X64-NEXT: retq
Sanjay Patel7b4e4af2016-10-14 14:14:40 +000041 %sh = lshr <8 x i16> %x, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
42 %neg = sub <8 x i16> zeroinitializer, %sh
43 ret <8 x i16> %neg
44}
45