348 changes: 162 additions & 186 deletions llvm/test/CodeGen/X86/fpclamptosat_vec.ll

Large diffs are not rendered by default.

72 changes: 66 additions & 6 deletions llvm/test/CodeGen/X86/half.ll
Original file line number Diff line number Diff line change
Expand Up @@ -228,13 +228,24 @@ define i64 @test_fptosi_i64(ptr %p) #0 {
;
; CHECK-I686-LABEL: test_fptosi_i64:
; CHECK-I686: # %bb.0:
; CHECK-I686-NEXT: subl $12, %esp
; CHECK-I686-NEXT: subl $28, %esp
; CHECK-I686-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK-I686-NEXT: pinsrw $0, (%eax), %xmm0
; CHECK-I686-NEXT: pextrw $0, %xmm0, %eax
; CHECK-I686-NEXT: movw %ax, (%esp)
; CHECK-I686-NEXT: calll __fixhfdi
; CHECK-I686-NEXT: addl $12, %esp
; CHECK-I686-NEXT: calll __extendhfsf2
; CHECK-I686-NEXT: fstps {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: flds {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fnstcw {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: movzwl {{[0-9]+}}(%esp), %eax
; CHECK-I686-NEXT: orl $3072, %eax # imm = 0xC00
; CHECK-I686-NEXT: movw %ax, {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fldcw {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fistpll {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fldcw {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK-I686-NEXT: movl {{[0-9]+}}(%esp), %edx
; CHECK-I686-NEXT: addl $28, %esp
; CHECK-I686-NEXT: retl
%a = load half, ptr %p, align 2
%r = fptosi half %a to i64
Expand Down Expand Up @@ -315,13 +326,36 @@ define i64 @test_fptoui_i64(ptr %p) #0 {
;
; CHECK-I686-LABEL: test_fptoui_i64:
; CHECK-I686: # %bb.0:
; CHECK-I686-NEXT: subl $12, %esp
; CHECK-I686-NEXT: subl $28, %esp
; CHECK-I686-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK-I686-NEXT: pinsrw $0, (%eax), %xmm0
; CHECK-I686-NEXT: pextrw $0, %xmm0, %eax
; CHECK-I686-NEXT: movw %ax, (%esp)
; CHECK-I686-NEXT: calll __fixunshfdi
; CHECK-I686-NEXT: addl $12, %esp
; CHECK-I686-NEXT: calll __extendhfsf2
; CHECK-I686-NEXT: fstps {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; CHECK-I686-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; CHECK-I686-NEXT: ucomiss %xmm1, %xmm0
; CHECK-I686-NEXT: jae .LBB9_2
; CHECK-I686-NEXT: # %bb.1:
; CHECK-I686-NEXT: xorps %xmm1, %xmm1
; CHECK-I686-NEXT: .LBB9_2:
; CHECK-I686-NEXT: subss %xmm1, %xmm0
; CHECK-I686-NEXT: movss %xmm0, {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: setae %al
; CHECK-I686-NEXT: flds {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fnstcw {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
; CHECK-I686-NEXT: orl $3072, %ecx # imm = 0xC00
; CHECK-I686-NEXT: movw %cx, {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fldcw {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fistpll {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: fldcw {{[0-9]+}}(%esp)
; CHECK-I686-NEXT: movzbl %al, %edx
; CHECK-I686-NEXT: shll $31, %edx
; CHECK-I686-NEXT: xorl {{[0-9]+}}(%esp), %edx
; CHECK-I686-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK-I686-NEXT: addl $28, %esp
; CHECK-I686-NEXT: retl
%a = load half, ptr %p, align 2
%r = fptoui half %a to i64
Expand Down Expand Up @@ -1297,4 +1331,30 @@ define <8 x half> @select(i1 %c, <8 x half> %x, <8 x half> %y) {
ret <8 x half> %s
}

define <8 x half> @shuffle(ptr %p) {
; CHECK-LIBCALL-LABEL: shuffle:
; CHECK-LIBCALL: # %bb.0:
; CHECK-LIBCALL-NEXT: movdqu (%rdi), %xmm0
; CHECK-LIBCALL-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
; CHECK-LIBCALL-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
; CHECK-LIBCALL-NEXT: retq
;
; BWON-F16C-LABEL: shuffle:
; BWON-F16C: # %bb.0:
; BWON-F16C-NEXT: vpshufhw {{.*#+}} xmm0 = mem[0,1,2,3,4,4,4,4]
; BWON-F16C-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
; BWON-F16C-NEXT: retq
;
; CHECK-I686-LABEL: shuffle:
; CHECK-I686: # %bb.0:
; CHECK-I686-NEXT: movl {{[0-9]+}}(%esp), %eax
; CHECK-I686-NEXT: movdqu (%eax), %xmm0
; CHECK-I686-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,4,4,4]
; CHECK-I686-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,2,2,2]
; CHECK-I686-NEXT: retl
%1 = load <8 x half>, ptr %p, align 8
%2 = shufflevector <8 x half> %1, <8 x half> poison, <8 x i32> <i32 4, i32 4, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
ret <8 x half> %2
}

attributes #0 = { nounwind }
4,552 changes: 4,088 additions & 464 deletions llvm/test/CodeGen/X86/vector-half-conversions.ll

Large diffs are not rendered by default.