119 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 | FileCheck %s3 4define float @dotf(<4 x float> %x, <4 x float> %y) {5; CHECK-LABEL: @dotf(6; CHECK-NEXT: entry:7; CHECK-NEXT: [[TMP0:%.*]] = fmul fast <4 x float> [[X:%.*]], [[Y:%.*]]8; CHECK-NEXT: [[TMP1:%.*]] = call fast float @llvm.vector.reduce.fadd.v4f32(float 0.000000e+00, <4 x float> [[TMP0]])9; CHECK-NEXT: ret float [[TMP1]]10;11entry:12 %vecext = extractelement <4 x float> %x, i32 013 %vecext1 = extractelement <4 x float> %y, i32 014 %mul = fmul fast float %vecext, %vecext115 %vecext.1 = extractelement <4 x float> %x, i32 116 %vecext1.1 = extractelement <4 x float> %y, i32 117 %mul.1 = fmul fast float %vecext.1, %vecext1.118 %add.1 = fadd fast float %mul.1, %mul19 %vecext.2 = extractelement <4 x float> %x, i32 220 %vecext1.2 = extractelement <4 x float> %y, i32 221 %mul.2 = fmul fast float %vecext.2, %vecext1.222 %add.2 = fadd fast float %mul.2, %add.123 %vecext.3 = extractelement <4 x float> %x, i32 324 %vecext1.3 = extractelement <4 x float> %y, i32 325 %mul.3 = fmul fast float %vecext.3, %vecext1.326 %add.3 = fadd fast float %mul.3, %add.227 ret float %add.328}29 30define double @dotd(ptr byval(<4 x double>) nocapture readonly align 32, ptr byval(<4 x double>) nocapture readonly align 32) {31; CHECK-LABEL: @dotd(32; CHECK-NEXT: entry:33; CHECK-NEXT: [[X:%.*]] = load <4 x double>, ptr [[TMP0:%.*]], align 3234; CHECK-NEXT: [[Y:%.*]] = load <4 x double>, ptr [[TMP1:%.*]], align 3235; CHECK-NEXT: [[TMP2:%.*]] = fmul fast <4 x double> [[X]], [[Y]]36; CHECK-NEXT: [[TMP3:%.*]] = call fast double @llvm.vector.reduce.fadd.v4f64(double 0.000000e+00, <4 x double> [[TMP2]])37; CHECK-NEXT: ret double [[TMP3]]38;39entry:40 %x = load <4 x double>, ptr %0, align 3241 %y = load <4 x double>, ptr %1, align 3242 %vecext = extractelement <4 x double> %x, i32 043 %vecext1 = extractelement <4 x double> %y, i32 044 %mul = fmul fast double %vecext, %vecext145 %vecext.1 = extractelement <4 x double> %x, i32 146 %vecext1.1 = extractelement <4 x double> %y, i32 147 %mul.1 = fmul fast double %vecext.1, %vecext1.148 %add.1 = fadd fast double %mul.1, %mul49 %vecext.2 = extractelement <4 x double> %x, i32 250 %vecext1.2 = extractelement <4 x double> %y, i32 251 %mul.2 = fmul fast double %vecext.2, %vecext1.252 %add.2 = fadd fast double %mul.2, %add.153 %vecext.3 = extractelement <4 x double> %x, i32 354 %vecext1.3 = extractelement <4 x double> %y, i32 355 %mul.3 = fmul fast double %vecext.3, %vecext1.356 %add.3 = fadd fast double %mul.3, %add.257 ret double %add.358}59 60define float @dotfq(ptr nocapture readonly %x, ptr nocapture readonly %y) {61; CHECK-LABEL: @dotfq(62; CHECK-NEXT: entry:63; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr [[X:%.*]], align 1664; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr [[Y:%.*]], align 1665; CHECK-NEXT: [[TMP2:%.*]] = fmul fast <4 x float> [[TMP1]], [[TMP0]]66; CHECK-NEXT: [[TMP3:%.*]] = call fast float @llvm.vector.reduce.fadd.v4f32(float 0.000000e+00, <4 x float> [[TMP2]])67; CHECK-NEXT: ret float [[TMP3]]68;69entry:70 %0 = load <4 x float>, ptr %x, align 1671 %1 = load <4 x float>, ptr %y, align 1672 %vecext = extractelement <4 x float> %0, i32 073 %vecext1 = extractelement <4 x float> %1, i32 074 %mul = fmul fast float %vecext1, %vecext75 %vecext.1 = extractelement <4 x float> %0, i32 176 %vecext1.1 = extractelement <4 x float> %1, i32 177 %mul.1 = fmul fast float %vecext1.1, %vecext.178 %add.1 = fadd fast float %mul.1, %mul79 %vecext.2 = extractelement <4 x float> %0, i32 280 %vecext1.2 = extractelement <4 x float> %1, i32 281 %mul.2 = fmul fast float %vecext1.2, %vecext.282 %add.2 = fadd fast float %mul.2, %add.183 %vecext.3 = extractelement <4 x float> %0, i32 384 %vecext1.3 = extractelement <4 x float> %1, i32 385 %mul.3 = fmul fast float %vecext1.3, %vecext.386 %add.3 = fadd fast float %mul.3, %add.287 ret float %add.388}89 90define double @dotdq(ptr nocapture readonly %x, ptr nocapture readonly %y) {91; CHECK-LABEL: @dotdq(92; CHECK-NEXT: entry:93; CHECK-NEXT: [[TMP0:%.*]] = load <4 x double>, ptr [[X:%.*]], align 3294; CHECK-NEXT: [[TMP1:%.*]] = load <4 x double>, ptr [[Y:%.*]], align 3295; CHECK-NEXT: [[TMP2:%.*]] = fmul fast <4 x double> [[TMP1]], [[TMP0]]96; CHECK-NEXT: [[TMP3:%.*]] = call fast double @llvm.vector.reduce.fadd.v4f64(double 0.000000e+00, <4 x double> [[TMP2]])97; CHECK-NEXT: ret double [[TMP3]]98;99entry:100 %0 = load <4 x double>, ptr %x, align 32101 %1 = load <4 x double>, ptr %y, align 32102 %vecext = extractelement <4 x double> %0, i32 0103 %vecext1 = extractelement <4 x double> %1, i32 0104 %mul = fmul fast double %vecext1, %vecext105 %vecext.1 = extractelement <4 x double> %0, i32 1106 %vecext1.1 = extractelement <4 x double> %1, i32 1107 %mul.1 = fmul fast double %vecext1.1, %vecext.1108 %add.1 = fadd fast double %mul.1, %mul109 %vecext.2 = extractelement <4 x double> %0, i32 2110 %vecext1.2 = extractelement <4 x double> %1, i32 2111 %mul.2 = fmul fast double %vecext1.2, %vecext.2112 %add.2 = fadd fast double %mul.2, %add.1113 %vecext.3 = extractelement <4 x double> %0, i32 3114 %vecext1.3 = extractelement <4 x double> %1, i32 3115 %mul.3 = fmul fast double %vecext1.3, %vecext.3116 %add.3 = fadd fast double %mul.3, %add.2117 ret double %add.3118}119