@@ -3027,109 +3027,41 @@ define void @PR43024() {
3027
3027
ret void
3028
3028
}
3029
3029
3030
- ; TODO - we're ignoring the i32->i16->i32 'ZERO_EXTEND_INREG' pattern, resulting in an bad movss .
3031
3030
define void @PR45604 (<32 x i16 >* %dst , <8 x i16 >* %src ) {
3032
- ; SSE2-LABEL: PR45604:
3033
- ; SSE2: # %bb.0:
3034
- ; SSE2-NEXT: movdqa (%rsi), %xmm1
3035
- ; SSE2-NEXT: pextrw $2, %xmm1, %eax
3036
- ; SSE2-NEXT: movd %eax, %xmm0
3037
- ; SSE2-NEXT: movl $11, %eax
3038
- ; SSE2-NEXT: pinsrw $2, %eax, %xmm0
3039
- ; SSE2-NEXT: pextrw $3, %xmm1, %ecx
3040
- ; SSE2-NEXT: pinsrw $4, %ecx, %xmm0
3041
- ; SSE2-NEXT: pinsrw $6, %eax, %xmm0
3042
- ; SSE2-NEXT: pextrw $4, %xmm1, %ecx
3043
- ; SSE2-NEXT: movd %ecx, %xmm2
3044
- ; SSE2-NEXT: pinsrw $2, %eax, %xmm2
3045
- ; SSE2-NEXT: pextrw $5, %xmm1, %ecx
3046
- ; SSE2-NEXT: pinsrw $4, %ecx, %xmm2
3047
- ; SSE2-NEXT: pinsrw $6, %eax, %xmm2
3048
- ; SSE2-NEXT: pextrw $6, %xmm1, %ecx
3049
- ; SSE2-NEXT: movd %ecx, %xmm3
3050
- ; SSE2-NEXT: pinsrw $2, %eax, %xmm3
3051
- ; SSE2-NEXT: pextrw $7, %xmm1, %ecx
3052
- ; SSE2-NEXT: pinsrw $4, %ecx, %xmm3
3053
- ; SSE2-NEXT: pinsrw $6, %eax, %xmm3
3054
- ; SSE2-NEXT: xorps %xmm4, %xmm4
3055
- ; SSE2-NEXT: movss {{.*#+}} xmm4 = xmm1[0],xmm4[1,2,3]
3056
- ; SSE2-NEXT: pinsrw $2, %eax, %xmm4
3057
- ; SSE2-NEXT: pextrw $1, %xmm1, %ecx
3058
- ; SSE2-NEXT: pinsrw $4, %ecx, %xmm4
3059
- ; SSE2-NEXT: pinsrw $6, %eax, %xmm4
3060
- ; SSE2-NEXT: movdqa %xmm4, (%rdi)
3061
- ; SSE2-NEXT: movdqa %xmm3, 48(%rdi)
3062
- ; SSE2-NEXT: movdqa %xmm2, 32(%rdi)
3063
- ; SSE2-NEXT: movdqa %xmm0, 16(%rdi)
3064
- ; SSE2-NEXT: retq
3065
- ;
3066
- ; SSSE3-LABEL: PR45604:
3067
- ; SSSE3: # %bb.0:
3068
- ; SSSE3-NEXT: movdqa (%rsi), %xmm1
3069
- ; SSSE3-NEXT: pextrw $2, %xmm1, %eax
3070
- ; SSSE3-NEXT: movd %eax, %xmm0
3071
- ; SSSE3-NEXT: movl $11, %eax
3072
- ; SSSE3-NEXT: pinsrw $2, %eax, %xmm0
3073
- ; SSSE3-NEXT: pextrw $3, %xmm1, %ecx
3074
- ; SSSE3-NEXT: pinsrw $4, %ecx, %xmm0
3075
- ; SSSE3-NEXT: pinsrw $6, %eax, %xmm0
3076
- ; SSSE3-NEXT: pextrw $4, %xmm1, %ecx
3077
- ; SSSE3-NEXT: movd %ecx, %xmm2
3078
- ; SSSE3-NEXT: pinsrw $2, %eax, %xmm2
3079
- ; SSSE3-NEXT: pextrw $5, %xmm1, %ecx
3080
- ; SSSE3-NEXT: pinsrw $4, %ecx, %xmm2
3081
- ; SSSE3-NEXT: pinsrw $6, %eax, %xmm2
3082
- ; SSSE3-NEXT: pextrw $6, %xmm1, %ecx
3083
- ; SSSE3-NEXT: movd %ecx, %xmm3
3084
- ; SSSE3-NEXT: pinsrw $2, %eax, %xmm3
3085
- ; SSSE3-NEXT: pextrw $7, %xmm1, %ecx
3086
- ; SSSE3-NEXT: pinsrw $4, %ecx, %xmm3
3087
- ; SSSE3-NEXT: pinsrw $6, %eax, %xmm3
3088
- ; SSSE3-NEXT: xorps %xmm4, %xmm4
3089
- ; SSSE3-NEXT: movss {{.*#+}} xmm4 = xmm1[0],xmm4[1,2,3]
3090
- ; SSSE3-NEXT: pinsrw $2, %eax, %xmm4
3091
- ; SSSE3-NEXT: pextrw $1, %xmm1, %ecx
3092
- ; SSSE3-NEXT: pinsrw $4, %ecx, %xmm4
3093
- ; SSSE3-NEXT: pinsrw $6, %eax, %xmm4
3094
- ; SSSE3-NEXT: movdqa %xmm4, (%rdi)
3095
- ; SSSE3-NEXT: movdqa %xmm3, 48(%rdi)
3096
- ; SSSE3-NEXT: movdqa %xmm2, 32(%rdi)
3097
- ; SSSE3-NEXT: movdqa %xmm0, 16(%rdi)
3098
- ; SSSE3-NEXT: retq
3099
- ;
3100
- ; SSE41-LABEL: PR45604:
3101
- ; SSE41: # %bb.0:
3102
- ; SSE41-NEXT: movdqa (%rsi), %xmm1
3103
- ; SSE41-NEXT: pextrw $2, %xmm1, %eax
3104
- ; SSE41-NEXT: movd %eax, %xmm0
3105
- ; SSE41-NEXT: movl $11, %eax
3106
- ; SSE41-NEXT: pinsrw $2, %eax, %xmm0
3107
- ; SSE41-NEXT: pextrw $3, %xmm1, %ecx
3108
- ; SSE41-NEXT: pinsrw $4, %ecx, %xmm0
3109
- ; SSE41-NEXT: pinsrw $6, %eax, %xmm0
3110
- ; SSE41-NEXT: pextrw $4, %xmm1, %ecx
3111
- ; SSE41-NEXT: movd %ecx, %xmm2
3112
- ; SSE41-NEXT: pinsrw $2, %eax, %xmm2
3113
- ; SSE41-NEXT: pextrw $5, %xmm1, %ecx
3114
- ; SSE41-NEXT: pinsrw $4, %ecx, %xmm2
3115
- ; SSE41-NEXT: pinsrw $6, %eax, %xmm2
3116
- ; SSE41-NEXT: pextrw $6, %xmm1, %ecx
3117
- ; SSE41-NEXT: movd %ecx, %xmm3
3118
- ; SSE41-NEXT: pinsrw $2, %eax, %xmm3
3119
- ; SSE41-NEXT: pextrw $7, %xmm1, %ecx
3120
- ; SSE41-NEXT: pinsrw $4, %ecx, %xmm3
3121
- ; SSE41-NEXT: pinsrw $6, %eax, %xmm3
3122
- ; SSE41-NEXT: pxor %xmm4, %xmm4
3123
- ; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm1[0,1],xmm4[2,3,4,5,6,7]
3124
- ; SSE41-NEXT: pinsrw $2, %eax, %xmm4
3125
- ; SSE41-NEXT: pextrw $1, %xmm1, %ecx
3126
- ; SSE41-NEXT: pinsrw $4, %ecx, %xmm4
3127
- ; SSE41-NEXT: pinsrw $6, %eax, %xmm4
3128
- ; SSE41-NEXT: movdqa %xmm4, (%rdi)
3129
- ; SSE41-NEXT: movdqa %xmm3, 48(%rdi)
3130
- ; SSE41-NEXT: movdqa %xmm2, 32(%rdi)
3131
- ; SSE41-NEXT: movdqa %xmm0, 16(%rdi)
3132
- ; SSE41-NEXT: retq
3031
+ ; SSE-LABEL: PR45604:
3032
+ ; SSE: # %bb.0:
3033
+ ; SSE-NEXT: movdqa (%rsi), %xmm1
3034
+ ; SSE-NEXT: movd %xmm1, %eax
3035
+ ; SSE-NEXT: movzwl %ax, %eax
3036
+ ; SSE-NEXT: movd %eax, %xmm0
3037
+ ; SSE-NEXT: movl $11, %eax
3038
+ ; SSE-NEXT: pinsrw $2, %eax, %xmm0
3039
+ ; SSE-NEXT: pextrw $1, %xmm1, %ecx
3040
+ ; SSE-NEXT: pinsrw $4, %ecx, %xmm0
3041
+ ; SSE-NEXT: pinsrw $6, %eax, %xmm0
3042
+ ; SSE-NEXT: pextrw $2, %xmm1, %ecx
3043
+ ; SSE-NEXT: movd %ecx, %xmm2
3044
+ ; SSE-NEXT: pinsrw $2, %eax, %xmm2
3045
+ ; SSE-NEXT: pextrw $3, %xmm1, %ecx
3046
+ ; SSE-NEXT: pinsrw $4, %ecx, %xmm2
3047
+ ; SSE-NEXT: pinsrw $6, %eax, %xmm2
3048
+ ; SSE-NEXT: pextrw $4, %xmm1, %ecx
3049
+ ; SSE-NEXT: movd %ecx, %xmm3
3050
+ ; SSE-NEXT: pinsrw $2, %eax, %xmm3
3051
+ ; SSE-NEXT: pextrw $5, %xmm1, %ecx
3052
+ ; SSE-NEXT: pinsrw $4, %ecx, %xmm3
3053
+ ; SSE-NEXT: pinsrw $6, %eax, %xmm3
3054
+ ; SSE-NEXT: pextrw $6, %xmm1, %ecx
3055
+ ; SSE-NEXT: movd %ecx, %xmm4
3056
+ ; SSE-NEXT: pinsrw $2, %eax, %xmm4
3057
+ ; SSE-NEXT: pextrw $7, %xmm1, %ecx
3058
+ ; SSE-NEXT: pinsrw $4, %ecx, %xmm4
3059
+ ; SSE-NEXT: pinsrw $6, %eax, %xmm4
3060
+ ; SSE-NEXT: movdqa %xmm4, 48(%rdi)
3061
+ ; SSE-NEXT: movdqa %xmm3, 32(%rdi)
3062
+ ; SSE-NEXT: movdqa %xmm2, 16(%rdi)
3063
+ ; SSE-NEXT: movdqa %xmm0, (%rdi)
3064
+ ; SSE-NEXT: retq
3133
3065
;
3134
3066
; AVX1-LABEL: PR45604:
3135
3067
; AVX1: # %bb.0:
0 commit comments