brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · f5718e0 Raw
108 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 -mattr=+avx2 | FileCheck %s3; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux -mattr=+avx2 -slp-threshold=-1 -slp-vectorize-hor-store | FileCheck %s --check-prefix=THRESH14; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux -mattr=+avx2 -slp-threshold=-2 -slp-vectorize-hor-store | FileCheck %s --check-prefix=THRESH25 6@a = global float 0.000000e+00, align 47 8define float @f(<2 x float> %x) {9; CHECK-LABEL: @f(10; CHECK-NEXT:    [[TMP1:%.*]] = fmul <2 x float> [[X:%.*]], [[X]]11; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <2 x float> [[TMP1]], i32 012; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP1]], i32 113; CHECK-NEXT:    [[ADD:%.*]] = fadd float [[TMP2]], [[TMP3]]14; CHECK-NEXT:    ret float [[ADD]]15;16; THRESH1-LABEL: @f(17; THRESH1-NEXT:    [[TMP1:%.*]] = fmul <2 x float> [[X:%.*]], [[X]]18; THRESH1-NEXT:    [[TMP2:%.*]] = extractelement <2 x float> [[TMP1]], i32 019; THRESH1-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP1]], i32 120; THRESH1-NEXT:    [[ADD:%.*]] = fadd float [[TMP2]], [[TMP3]]21; THRESH1-NEXT:    ret float [[ADD]]22;23; THRESH2-LABEL: @f(24; THRESH2-NEXT:    [[TMP1:%.*]] = fmul <2 x float> [[X:%.*]], [[X]]25; THRESH2-NEXT:    [[TMP2:%.*]] = extractelement <2 x float> [[TMP1]], i32 026; THRESH2-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP1]], i32 127; THRESH2-NEXT:    [[ADD:%.*]] = fadd float [[TMP2]], [[TMP3]]28; THRESH2-NEXT:    ret float [[ADD]]29;30  %x0 = extractelement <2 x float> %x, i32 031  %x1 = extractelement <2 x float> %x, i32 132  %x0x0 = fmul float %x0, %x033  %x1x1 = fmul float %x1, %x134  %add = fadd float %x0x0, %x1x135  ret float %add36}37 38define float @f_used_out_of_tree(<2 x float> %x) {39; CHECK-LABEL: @f_used_out_of_tree(40; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x float> [[X:%.*]], i32 041; CHECK-NEXT:    [[TMP2:%.*]] = fmul <2 x float> [[X]], [[X]]42; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP2]], i32 043; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <2 x float> [[TMP2]], i32 144; CHECK-NEXT:    [[ADD:%.*]] = fadd float [[TMP3]], [[TMP4]]45; CHECK-NEXT:    store float [[ADD]], ptr @a, align 446; CHECK-NEXT:    ret float [[TMP1]]47;48; THRESH1-LABEL: @f_used_out_of_tree(49; THRESH1-NEXT:    [[TMP1:%.*]] = extractelement <2 x float> [[X:%.*]], i32 050; THRESH1-NEXT:    [[TMP2:%.*]] = fmul <2 x float> [[X]], [[X]]51; THRESH1-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP2]], i32 052; THRESH1-NEXT:    [[TMP4:%.*]] = extractelement <2 x float> [[TMP2]], i32 153; THRESH1-NEXT:    [[ADD:%.*]] = fadd float [[TMP3]], [[TMP4]]54; THRESH1-NEXT:    store float [[ADD]], ptr @a, align 455; THRESH1-NEXT:    ret float [[TMP1]]56;57; THRESH2-LABEL: @f_used_out_of_tree(58; THRESH2-NEXT:    [[TMP1:%.*]] = extractelement <2 x float> [[X:%.*]], i32 059; THRESH2-NEXT:    [[TMP2:%.*]] = fmul <2 x float> [[X]], [[X]]60; THRESH2-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP2]], i32 061; THRESH2-NEXT:    [[TMP4:%.*]] = extractelement <2 x float> [[TMP2]], i32 162; THRESH2-NEXT:    [[ADD:%.*]] = fadd float [[TMP3]], [[TMP4]]63; THRESH2-NEXT:    store float [[ADD]], ptr @a, align 464; THRESH2-NEXT:    ret float [[TMP1]]65;66  %x0 = extractelement <2 x float> %x, i32 067  %x1 = extractelement <2 x float> %x, i32 168  %x0x0 = fmul float %x0, %x069  %x1x1 = fmul float %x1, %x170  %add = fadd float %x0x0, %x1x171  store float %add, ptr @a72  ret float %x073}74 75define float @f_used_twice_in_tree(<2 x float> %x) {76; CHECK-LABEL: @f_used_twice_in_tree(77; CHECK-NEXT:    [[X0:%.*]] = extractelement <2 x float> [[X:%.*]], i32 078; CHECK-NEXT:    [[X1:%.*]] = extractelement <2 x float> [[X]], i32 179; CHECK-NEXT:    [[X0X0:%.*]] = fmul float [[X0]], [[X1]]80; CHECK-NEXT:    [[X1X1:%.*]] = fmul float [[X1]], [[X1]]81; CHECK-NEXT:    [[ADD:%.*]] = fadd float [[X0X0]], [[X1X1]]82; CHECK-NEXT:    ret float [[ADD]]83;84; THRESH1-LABEL: @f_used_twice_in_tree(85; THRESH1-NEXT:    [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> <i32 1, i32 1>86; THRESH1-NEXT:    [[TMP2:%.*]] = fmul <2 x float> [[TMP1]], [[X]]87; THRESH1-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP2]], i32 088; THRESH1-NEXT:    [[TMP4:%.*]] = extractelement <2 x float> [[TMP2]], i32 189; THRESH1-NEXT:    [[ADD:%.*]] = fadd float [[TMP3]], [[TMP4]]90; THRESH1-NEXT:    ret float [[ADD]]91;92; THRESH2-LABEL: @f_used_twice_in_tree(93; THRESH2-NEXT:    [[TMP1:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <2 x i32> <i32 1, i32 1>94; THRESH2-NEXT:    [[TMP2:%.*]] = fmul <2 x float> [[TMP1]], [[X]]95; THRESH2-NEXT:    [[TMP3:%.*]] = extractelement <2 x float> [[TMP2]], i32 096; THRESH2-NEXT:    [[TMP4:%.*]] = extractelement <2 x float> [[TMP2]], i32 197; THRESH2-NEXT:    [[ADD:%.*]] = fadd float [[TMP3]], [[TMP4]]98; THRESH2-NEXT:    ret float [[ADD]]99;100  %x0 = extractelement <2 x float> %x, i32 0101  %x1 = extractelement <2 x float> %x, i32 1102  %x0x0 = fmul float %x0, %x1103  %x1x1 = fmul float %x1, %x1104  %add = fadd float %x0x0, %x1x1105  ret float %add106}107 108