128 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s3 4define <4 x float> @select_mask_add_ss(<4 x float> %w, i8 zeroext %u, <4 x float> %a, <4 x float> %b) {5; CHECK-LABEL: select_mask_add_ss:6; CHECK: ## %bb.0: ## %entry7; CHECK-NEXT: kmovw %edi, %k18; CHECK-NEXT: vaddss %xmm2, %xmm1, %xmm0 {%k1}9; CHECK-NEXT: retq10entry:11 %0 = extractelement <4 x float> %b, i32 012 %1 = extractelement <4 x float> %a, i32 013 %2 = fadd float %1, %014 %3 = and i8 %u, 115 %4 = icmp eq i8 %3, 016 %5 = extractelement <4 x float> %w, i32 017 %6 = select i1 %4, float %5, float %218 %7 = insertelement <4 x float> %a, float %6, i32 019 ret <4 x float> %720}21 22define <4 x float> @select_maskz_add_ss(i8 zeroext %u, <4 x float> %a, <4 x float> %b) {23; CHECK-LABEL: select_maskz_add_ss:24; CHECK: ## %bb.0: ## %entry25; CHECK-NEXT: kmovw %edi, %k126; CHECK-NEXT: vaddss %xmm1, %xmm0, %xmm0 {%k1} {z}27; CHECK-NEXT: retq28entry:29 %0 = extractelement <4 x float> %b, i32 030 %1 = extractelement <4 x float> %a, i32 031 %2 = fadd float %1, %032 %3 = and i8 %u, 133 %4 = icmp eq i8 %3, 034 %5 = select i1 %4, float 0.000000e+00, float %235 %6 = insertelement <4 x float> %a, float %5, i32 036 ret <4 x float> %637}38 39define <4 x float> @select_mask_sub_ss(<4 x float> %w, i8 zeroext %u, <4 x float> %a, <4 x float> %b) {40; CHECK-LABEL: select_mask_sub_ss:41; CHECK: ## %bb.0: ## %entry42; CHECK-NEXT: kmovw %edi, %k143; CHECK-NEXT: vsubss %xmm2, %xmm1, %xmm0 {%k1}44; CHECK-NEXT: retq45entry:46 %0 = extractelement <4 x float> %b, i32 047 %1 = extractelement <4 x float> %a, i32 048 %2 = fsub float %1, %049 %3 = and i8 %u, 150 %4 = icmp eq i8 %3, 051 %5 = extractelement <4 x float> %w, i32 052 %6 = select i1 %4, float %5, float %253 %7 = insertelement <4 x float> %a, float %6, i32 054 ret <4 x float> %755}56 57define <4 x float> @select_maskz_sub_ss(i8 zeroext %u, <4 x float> %a, <4 x float> %b) {58; CHECK-LABEL: select_maskz_sub_ss:59; CHECK: ## %bb.0: ## %entry60; CHECK-NEXT: kmovw %edi, %k161; CHECK-NEXT: vsubss %xmm1, %xmm0, %xmm0 {%k1} {z}62; CHECK-NEXT: retq63entry:64 %0 = extractelement <4 x float> %b, i32 065 %1 = extractelement <4 x float> %a, i32 066 %2 = fsub float %1, %067 %3 = and i8 %u, 168 %4 = icmp eq i8 %3, 069 %5 = select i1 %4, float 0.000000e+00, float %270 %6 = insertelement <4 x float> %a, float %5, i32 071 ret <4 x float> %672}73 74define <4 x float> @select_mask_mul_ss(<4 x float> %w, i8 zeroext %u, <4 x float> %a, <4 x float> %b) {75; CHECK-LABEL: select_mask_mul_ss:76; CHECK: ## %bb.0: ## %entry77; CHECK-NEXT: kmovw %edi, %k178; CHECK-NEXT: vmulss %xmm2, %xmm1, %xmm0 {%k1}79; CHECK-NEXT: retq80entry:81 %0 = extractelement <4 x float> %b, i32 082 %1 = extractelement <4 x float> %a, i32 083 %2 = fmul float %1, %084 %3 = and i8 %u, 185 %4 = icmp eq i8 %3, 086 %5 = extractelement <4 x float> %w, i32 087 %6 = select i1 %4, float %5, float %288 %7 = insertelement <4 x float> %a, float %6, i32 089 ret <4 x float> %790}91 92define <4 x float> @select_maskz_mul_ss(i8 zeroext %u, <4 x float> %a, <4 x float> %b) {93; CHECK-LABEL: select_maskz_mul_ss:94; CHECK: ## %bb.0: ## %entry95; CHECK-NEXT: kmovw %edi, %k196; CHECK-NEXT: vmulss %xmm1, %xmm0, %xmm0 {%k1} {z}97; CHECK-NEXT: retq98entry:99 %0 = extractelement <4 x float> %b, i32 0100 %1 = extractelement <4 x float> %a, i32 0101 %2 = fmul float %1, %0102 %3 = and i8 %u, 1103 %4 = icmp eq i8 %3, 0104 %5 = select i1 %4, float 0.000000e+00, float %2105 %6 = insertelement <4 x float> %a, float %5, i32 0106 ret <4 x float> %6107}108 109; Make sure we don't crash trying to truncate the and instruction i4->i8. We need to extend instead.110define <4 x float> @select_mask_add_ss_small_mask_type(<4 x float> %w, i4 %u, <4 x float> %a, <4 x float> %b) {111; CHECK-LABEL: select_mask_add_ss_small_mask_type:112; CHECK: ## %bb.0: ## %entry113; CHECK-NEXT: kmovw %edi, %k1114; CHECK-NEXT: vaddss %xmm2, %xmm1, %xmm0 {%k1}115; CHECK-NEXT: retq116entry:117 %0 = extractelement <4 x float> %b, i32 0118 %1 = extractelement <4 x float> %a, i32 0119 %2 = fadd float %1, %0120 %3 = and i4 %u, 1121 %4 = icmp eq i4 %3, 0122 %5 = extractelement <4 x float> %w, i32 0123 %6 = select i1 %4, float %5, float %2124 %7 = insertelement <4 x float> %a, float %6, i32 0125 ret <4 x float> %7126}127 128