Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=i686-unknown-unknown    | FileCheck %s -check-prefix=X32
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown  | FileCheck %s -check-prefix=X64
      4 
      5 ; DAGCombiner crashes during sext folding
      6 
      7 define <2 x i256> @test_sext1() {
      8 ; X32-LABEL: test_sext1:
      9 ; X32:       # %bb.0:
     10 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
     11 ; X32-NEXT:    movl $-1, 60(%eax)
     12 ; X32-NEXT:    movl $-1, 56(%eax)
     13 ; X32-NEXT:    movl $-1, 52(%eax)
     14 ; X32-NEXT:    movl $-1, 48(%eax)
     15 ; X32-NEXT:    movl $-1, 44(%eax)
     16 ; X32-NEXT:    movl $-1, 40(%eax)
     17 ; X32-NEXT:    movl $-1, 36(%eax)
     18 ; X32-NEXT:    movl $-99, 32(%eax)
     19 ; X32-NEXT:    movl $0, 28(%eax)
     20 ; X32-NEXT:    movl $0, 24(%eax)
     21 ; X32-NEXT:    movl $0, 20(%eax)
     22 ; X32-NEXT:    movl $0, 16(%eax)
     23 ; X32-NEXT:    movl $0, 12(%eax)
     24 ; X32-NEXT:    movl $0, 8(%eax)
     25 ; X32-NEXT:    movl $0, 4(%eax)
     26 ; X32-NEXT:    movl $0, (%eax)
     27 ; X32-NEXT:    retl $4
     28 ;
     29 ; X64-LABEL: test_sext1:
     30 ; X64:       # %bb.0:
     31 ; X64-NEXT:    xorps %xmm0, %xmm0
     32 ; X64-NEXT:    movaps %xmm0, 16(%rdi)
     33 ; X64-NEXT:    movaps %xmm0, (%rdi)
     34 ; X64-NEXT:    movq $-1, 56(%rdi)
     35 ; X64-NEXT:    movq $-1, 48(%rdi)
     36 ; X64-NEXT:    movq $-1, 40(%rdi)
     37 ; X64-NEXT:    movq $-99, 32(%rdi)
     38 ; X64-NEXT:    movq %rdi, %rax
     39 ; X64-NEXT:    retq
     40   %Se = sext <2 x i8> <i8 -100, i8 -99> to <2 x i256>
     41   %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>
     42   ret <2 x i256> %Shuff
     43 }
     44 
     45 define <2 x i256> @test_sext2() {
     46 ; X32-LABEL: test_sext2:
     47 ; X32:       # %bb.0:
     48 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
     49 ; X32-NEXT:    movl $-1, 60(%eax)
     50 ; X32-NEXT:    movl $-1, 56(%eax)
     51 ; X32-NEXT:    movl $-1, 52(%eax)
     52 ; X32-NEXT:    movl $-1, 48(%eax)
     53 ; X32-NEXT:    movl $-1, 44(%eax)
     54 ; X32-NEXT:    movl $-1, 40(%eax)
     55 ; X32-NEXT:    movl $-1, 36(%eax)
     56 ; X32-NEXT:    movl $-1999, 32(%eax) # imm = 0xF831
     57 ; X32-NEXT:    movl $0, 28(%eax)
     58 ; X32-NEXT:    movl $0, 24(%eax)
     59 ; X32-NEXT:    movl $0, 20(%eax)
     60 ; X32-NEXT:    movl $0, 16(%eax)
     61 ; X32-NEXT:    movl $0, 12(%eax)
     62 ; X32-NEXT:    movl $0, 8(%eax)
     63 ; X32-NEXT:    movl $0, 4(%eax)
     64 ; X32-NEXT:    movl $0, (%eax)
     65 ; X32-NEXT:    retl $4
     66 ;
     67 ; X64-LABEL: test_sext2:
     68 ; X64:       # %bb.0:
     69 ; X64-NEXT:    xorps %xmm0, %xmm0
     70 ; X64-NEXT:    movaps %xmm0, 16(%rdi)
     71 ; X64-NEXT:    movaps %xmm0, (%rdi)
     72 ; X64-NEXT:    movq $-1, 56(%rdi)
     73 ; X64-NEXT:    movq $-1, 48(%rdi)
     74 ; X64-NEXT:    movq $-1, 40(%rdi)
     75 ; X64-NEXT:    movq $-1999, 32(%rdi) # imm = 0xF831
     76 ; X64-NEXT:    movq %rdi, %rax
     77 ; X64-NEXT:    retq
     78   %Se = sext <2 x i128> <i128 -2000, i128 -1999> to <2 x i256>
     79   %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>
     80   ret <2 x i256> %Shuff
     81 }
     82 
     83 define <2 x i256> @test_zext1() {
     84 ; X32-LABEL: test_zext1:
     85 ; X32:       # %bb.0:
     86 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
     87 ; X32-NEXT:    movl $0, 60(%eax)
     88 ; X32-NEXT:    movl $0, 56(%eax)
     89 ; X32-NEXT:    movl $0, 52(%eax)
     90 ; X32-NEXT:    movl $0, 48(%eax)
     91 ; X32-NEXT:    movl $0, 44(%eax)
     92 ; X32-NEXT:    movl $0, 40(%eax)
     93 ; X32-NEXT:    movl $0, 36(%eax)
     94 ; X32-NEXT:    movl $254, 32(%eax)
     95 ; X32-NEXT:    movl $0, 28(%eax)
     96 ; X32-NEXT:    movl $0, 24(%eax)
     97 ; X32-NEXT:    movl $0, 20(%eax)
     98 ; X32-NEXT:    movl $0, 16(%eax)
     99 ; X32-NEXT:    movl $0, 12(%eax)
    100 ; X32-NEXT:    movl $0, 8(%eax)
    101 ; X32-NEXT:    movl $0, 4(%eax)
    102 ; X32-NEXT:    movl $0, (%eax)
    103 ; X32-NEXT:    retl $4
    104 ;
    105 ; X64-LABEL: test_zext1:
    106 ; X64:       # %bb.0:
    107 ; X64-NEXT:    xorps %xmm0, %xmm0
    108 ; X64-NEXT:    movaps %xmm0, 48(%rdi)
    109 ; X64-NEXT:    movaps %xmm0, 16(%rdi)
    110 ; X64-NEXT:    movaps %xmm0, (%rdi)
    111 ; X64-NEXT:    movq $0, 40(%rdi)
    112 ; X64-NEXT:    movq $254, 32(%rdi)
    113 ; X64-NEXT:    movq %rdi, %rax
    114 ; X64-NEXT:    retq
    115   %Se = zext <2 x i8> <i8 -1, i8 -2> to <2 x i256>
    116   %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>
    117   ret <2 x i256> %Shuff
    118 }
    119 
    120 define <2 x i256> @test_zext2() {
    121 ; X32-LABEL: test_zext2:
    122 ; X32:       # %bb.0:
    123 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
    124 ; X32-NEXT:    movl $0, 60(%eax)
    125 ; X32-NEXT:    movl $0, 56(%eax)
    126 ; X32-NEXT:    movl $0, 52(%eax)
    127 ; X32-NEXT:    movl $0, 48(%eax)
    128 ; X32-NEXT:    movl $-1, 44(%eax)
    129 ; X32-NEXT:    movl $-1, 40(%eax)
    130 ; X32-NEXT:    movl $-1, 36(%eax)
    131 ; X32-NEXT:    movl $-2, 32(%eax)
    132 ; X32-NEXT:    movl $0, 28(%eax)
    133 ; X32-NEXT:    movl $0, 24(%eax)
    134 ; X32-NEXT:    movl $0, 20(%eax)
    135 ; X32-NEXT:    movl $0, 16(%eax)
    136 ; X32-NEXT:    movl $0, 12(%eax)
    137 ; X32-NEXT:    movl $0, 8(%eax)
    138 ; X32-NEXT:    movl $0, 4(%eax)
    139 ; X32-NEXT:    movl $0, (%eax)
    140 ; X32-NEXT:    retl $4
    141 ;
    142 ; X64-LABEL: test_zext2:
    143 ; X64:       # %bb.0:
    144 ; X64-NEXT:    xorps %xmm0, %xmm0
    145 ; X64-NEXT:    movaps %xmm0, 48(%rdi)
    146 ; X64-NEXT:    movaps %xmm0, 16(%rdi)
    147 ; X64-NEXT:    movaps %xmm0, (%rdi)
    148 ; X64-NEXT:    movq $-1, 40(%rdi)
    149 ; X64-NEXT:    movq $-2, 32(%rdi)
    150 ; X64-NEXT:    movq %rdi, %rax
    151 ; X64-NEXT:    retq
    152   %Se = zext <2 x i128> <i128 -1, i128 -2> to <2 x i256>
    153   %Shuff = shufflevector <2 x i256> zeroinitializer, <2 x i256> %Se, <2 x i32> <i32 1, i32 3>
    154   ret <2 x i256> %Shuff
    155 }
    156