brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.8 KiB · 6895ddc Raw
431 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt --passes=slp-vectorizer --mtriple=x86_64 -S < %s | FileCheck %s3 4@input1_f32 = global [9 x float] zeroinitializer, align 165@input2_f32 = global [9 x float] zeroinitializer, align 166@output_f32 = global [9 x float] zeroinitializer, align 167@input1_f64 = global [9 x double] zeroinitializer, align 168@input2_f64 = global [9 x double] zeroinitializer, align 169@output_f64 = global [9 x double] zeroinitializer, align 1610@input1_f16 = global [9 x half] zeroinitializer, align 1611@input2_f16 = global [9 x half] zeroinitializer, align 1612@output_f16 = global [9 x half] zeroinitializer, align 1613 14define void @fmin32()  {15; CHECK-LABEL: define void @fmin32() {16; CHECK-NEXT:  [[ENTRY:.*:]]17; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr @input1_f32, align 1618; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr @input2_f32, align 1619; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])20; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @output_f32, align 1621; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 1622; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 1623; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> [[TMP3]], <4 x float> [[TMP4]])24; CHECK-NEXT:    store <4 x float> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 1625; CHECK-NEXT:    [[TMP24:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 1626; CHECK-NEXT:    [[TMP25:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 1627; CHECK-NEXT:    [[TMP26:%.*]] = tail call float @llvm.minimumnum.f32(float [[TMP24]], float [[TMP25]])28; CHECK-NEXT:    store float [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 1629; CHECK-NEXT:    ret void30;31entry:32  %input0_0 = load float, ptr @input1_f32, align 1633  %input0_1 = load float, ptr @input2_f32, align 1634  %output0 = tail call float @llvm.minimumnum.f32(float %input0_0, float %input0_1)35  store float %output0, ptr @output_f32, align 1636  %input1_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 4), align 437  %input1_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 4), align 438  %output1 = tail call float @llvm.minimumnum.f32(float %input1_1, float %input1_2)39  store float %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 4), align 440  %input2_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 8), align 841  %input2_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 8), align 842  %output2 = tail call float @llvm.minimumnum.f32(float %input2_1, float %input2_2)43  store float %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 8), align 844  %input3_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 12), align 445  %input3_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 12), align 446  %output3 = tail call float @llvm.minimumnum.f32(float %input3_1, float %input3_2)47  store float %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 12), align 448  %input4_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 1649  %input4_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 1650  %output4 = tail call float @llvm.minimumnum.f32(float %input4_1, float %input4_2)51  store float %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 1652  %input5_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 20), align 453  %input5_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 20), align 454  %output5 = tail call float @llvm.minimumnum.f32(float %input5_1, float %input5_2)55  store float %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 20), align 456  %input6_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 24), align 857  %input6_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 24), align 858  %output6 = tail call float @llvm.minimumnum.f32(float %input6_1, float %input6_2)59  store float %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 24), align 860  %input7_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 28), align 461  %input7_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 28), align 462  %output7 = tail call float @llvm.minimumnum.f32(float %input7_1, float %input7_2)63  store float %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 28), align 464  %input8_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 1665  %input8_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 1666  %output8 = tail call float @llvm.minimumnum.f32(float %input8_1, float %input8_2)67  store float %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 1668  ret void69}70 71declare float @llvm.minimumnum.f32(float, float)72 73define void @fmax32()  {74; CHECK-LABEL: define void @fmax32() {75; CHECK-NEXT:  [[ENTRY:.*:]]76; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr @input1_f32, align 1677; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr @input2_f32, align 1678; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])79; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @output_f32, align 1680; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 1681; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 1682; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> [[TMP3]], <4 x float> [[TMP4]])83; CHECK-NEXT:    store <4 x float> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 1684; CHECK-NEXT:    [[TMP24:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 1685; CHECK-NEXT:    [[TMP25:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 1686; CHECK-NEXT:    [[TMP26:%.*]] = tail call float @llvm.maximumnum.f32(float [[TMP24]], float [[TMP25]])87; CHECK-NEXT:    store float [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 1688; CHECK-NEXT:    ret void89;90entry:91  %input0_0 = load float, ptr @input1_f32, align 1692  %input0_1 = load float, ptr @input2_f32, align 1693  %output0 = tail call float @llvm.maximumnum.f32(float %input0_0, float %input0_1)94  store float %output0, ptr @output_f32, align 1695  %input1_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 4), align 496  %input1_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 4), align 497  %output1 = tail call float @llvm.maximumnum.f32(float %input1_1, float %input1_2)98  store float %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 4), align 499  %input2_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 8), align 8100  %input2_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 8), align 8101  %output2 = tail call float @llvm.maximumnum.f32(float %input2_1, float %input2_2)102  store float %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 8), align 8103  %input3_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 12), align 4104  %input3_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 12), align 4105  %output3 = tail call float @llvm.maximumnum.f32(float %input3_1, float %input3_2)106  store float %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 12), align 4107  %input4_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 16108  %input4_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 16109  %output4 = tail call float @llvm.maximumnum.f32(float %input4_1, float %input4_2)110  store float %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 16111  %input5_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 20), align 4112  %input5_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 20), align 4113  %output5 = tail call float @llvm.maximumnum.f32(float %input5_1, float %input5_2)114  store float %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 20), align 4115  %input6_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 24), align 8116  %input6_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 24), align 8117  %output6 = tail call float @llvm.maximumnum.f32(float %input6_1, float %input6_2)118  store float %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 24), align 8119  %input7_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 28), align 4120  %input7_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 28), align 4121  %output7 = tail call float @llvm.maximumnum.f32(float %input7_1, float %input7_2)122  store float %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 28), align 4123  %input8_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 16124  %input8_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 16125  %output8 = tail call float @llvm.maximumnum.f32(float %input8_1, float %input8_2)126  store float %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 16127  ret void128}129 130declare float @llvm.maximumnum.f32(float, float)131 132define void @fmin64()  {133; CHECK-LABEL: define void @fmin64() {134; CHECK-NEXT:  [[ENTRY:.*:]]135; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr @input1_f64, align 16136; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr @input2_f64, align 16137; CHECK-NEXT:    [[TMP2:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP0]], <2 x double> [[TMP1]])138; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @output_f64, align 16139; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16140; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16141; CHECK-NEXT:    [[TMP5:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP3]], <2 x double> [[TMP4]])142; CHECK-NEXT:    store <2 x double> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16143; CHECK-NEXT:    [[TMP6:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16144; CHECK-NEXT:    [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16145; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP6]], <2 x double> [[TMP7]])146; CHECK-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16147; CHECK-NEXT:    [[TMP9:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16148; CHECK-NEXT:    [[TMP10:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16149; CHECK-NEXT:    [[TMP11:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP9]], <2 x double> [[TMP10]])150; CHECK-NEXT:    store <2 x double> [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16151; CHECK-NEXT:    [[TMP24:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16152; CHECK-NEXT:    [[TMP25:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16153; CHECK-NEXT:    [[TMP26:%.*]] = tail call double @llvm.minimumnum.f64(double [[TMP24]], double [[TMP25]])154; CHECK-NEXT:    store double [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16155; CHECK-NEXT:    ret void156;157entry:158  %input0_0 = load double, ptr @input1_f64, align 16159  %input0_1 = load double, ptr @input2_f64, align 16160  %output0 = tail call double @llvm.minimumnum.f64(double %input0_0, double %input0_1)161  store double %output0, ptr @output_f64, align 16162  %input1_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 8), align 8163  %input1_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 8), align 8164  %output1 = tail call double @llvm.minimumnum.f64(double %input1_1, double %input1_2)165  store double %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 8), align 8166  %input2_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16167  %input2_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16168  %output2 = tail call double @llvm.minimumnum.f64(double %input2_1, double %input2_2)169  store double %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16170  %input3_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 24), align 8171  %input3_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 24), align 8172  %output3 = tail call double @llvm.minimumnum.f64(double %input3_1, double %input3_2)173  store double %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 24), align 8174  %input4_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16175  %input4_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16176  %output4 = tail call double @llvm.minimumnum.f64(double %input4_1, double %input4_2)177  store double %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16178  %input5_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 40), align 8179  %input5_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 40), align 8180  %output5 = tail call double @llvm.minimumnum.f64(double %input5_1, double %input5_2)181  store double %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 40), align 8182  %input6_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16183  %input6_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16184  %output6 = tail call double @llvm.minimumnum.f64(double %input6_1, double %input6_2)185  store double %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16186  %input7_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 56), align 8187  %input7_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 56), align 8188  %output7 = tail call double @llvm.minimumnum.f64(double %input7_1, double %input7_2)189  store double %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 56), align 8190  %input8_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16191  %input8_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16192  %output8 = tail call double @llvm.minimumnum.f64(double %input8_1, double %input8_2)193  store double %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16194  ret void195}196 197declare double @llvm.minimumnum.f64(double, double)198 199define void @fmax64()  {200; CHECK-LABEL: define void @fmax64() {201; CHECK-NEXT:  [[ENTRY:.*:]]202; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr @input1_f64, align 16203; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr @input2_f64, align 16204; CHECK-NEXT:    [[TMP2:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP0]], <2 x double> [[TMP1]])205; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @output_f64, align 16206; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16207; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16208; CHECK-NEXT:    [[TMP5:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP3]], <2 x double> [[TMP4]])209; CHECK-NEXT:    store <2 x double> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16210; CHECK-NEXT:    [[TMP6:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16211; CHECK-NEXT:    [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16212; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP6]], <2 x double> [[TMP7]])213; CHECK-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16214; CHECK-NEXT:    [[TMP9:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16215; CHECK-NEXT:    [[TMP10:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16216; CHECK-NEXT:    [[TMP11:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP9]], <2 x double> [[TMP10]])217; CHECK-NEXT:    store <2 x double> [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16218; CHECK-NEXT:    [[TMP24:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16219; CHECK-NEXT:    [[TMP25:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16220; CHECK-NEXT:    [[TMP26:%.*]] = tail call double @llvm.maximumnum.f64(double [[TMP24]], double [[TMP25]])221; CHECK-NEXT:    store double [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16222; CHECK-NEXT:    ret void223;224entry:225  %input0_0 = load double, ptr @input1_f64, align 16226  %input0_1 = load double, ptr @input2_f64, align 16227  %output0 = tail call double @llvm.maximumnum.f64(double %input0_0, double %input0_1)228  store double %output0, ptr @output_f64, align 16229  %input1_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 8), align 8230  %input1_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 8), align 8231  %output1 = tail call double @llvm.maximumnum.f64(double %input1_1, double %input1_2)232  store double %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 8), align 8233  %input2_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16234  %input2_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16235  %output2 = tail call double @llvm.maximumnum.f64(double %input2_1, double %input2_2)236  store double %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16237  %input3_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 24), align 8238  %input3_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 24), align 8239  %output3 = tail call double @llvm.maximumnum.f64(double %input3_1, double %input3_2)240  store double %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 24), align 8241  %input4_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16242  %input4_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16243  %output4 = tail call double @llvm.maximumnum.f64(double %input4_1, double %input4_2)244  store double %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16245  %input5_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 40), align 8246  %input5_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 40), align 8247  %output5 = tail call double @llvm.maximumnum.f64(double %input5_1, double %input5_2)248  store double %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 40), align 8249  %input6_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16250  %input6_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16251  %output6 = tail call double @llvm.maximumnum.f64(double %input6_1, double %input6_2)252  store double %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16253  %input7_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 56), align 8254  %input7_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 56), align 8255  %output7 = tail call double @llvm.maximumnum.f64(double %input7_1, double %input7_2)256  store double %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 56), align 8257  %input8_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16258  %input8_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16259  %output8 = tail call double @llvm.maximumnum.f64(double %input8_1, double %input8_2)260  store double %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16261  ret void262}263 264declare double @llvm.maximumnum.f64(double, double)265 266define void @fmin16()  {267; CHECK-LABEL: define void @fmin16() {268; CHECK-NEXT:  [[ENTRY:.*:]]269; CHECK-NEXT:    [[TMP0:%.*]] = load half, ptr @input1_f16, align 16270; CHECK-NEXT:    [[TMP1:%.*]] = load half, ptr @input2_f16, align 16271; CHECK-NEXT:    [[TMP2:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP0]], half [[TMP1]])272; CHECK-NEXT:    store half [[TMP2]], ptr @output_f16, align 16273; CHECK-NEXT:    [[TMP3:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 2), align 2274; CHECK-NEXT:    [[TMP4:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 2), align 2275; CHECK-NEXT:    [[TMP5:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP3]], half [[TMP4]])276; CHECK-NEXT:    store half [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 2), align 2277; CHECK-NEXT:    [[TMP6:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 4), align 4278; CHECK-NEXT:    [[TMP7:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 4), align 4279; CHECK-NEXT:    [[TMP8:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP6]], half [[TMP7]])280; CHECK-NEXT:    store half [[TMP8]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 4), align 4281; CHECK-NEXT:    [[TMP9:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 6), align 2282; CHECK-NEXT:    [[TMP10:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 6), align 2283; CHECK-NEXT:    [[TMP11:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP9]], half [[TMP10]])284; CHECK-NEXT:    store half [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 6), align 2285; CHECK-NEXT:    [[TMP12:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 8), align 8286; CHECK-NEXT:    [[TMP13:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 8), align 8287; CHECK-NEXT:    [[TMP14:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP12]], half [[TMP13]])288; CHECK-NEXT:    store half [[TMP14]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 8), align 8289; CHECK-NEXT:    [[TMP15:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 10), align 2290; CHECK-NEXT:    [[TMP16:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 10), align 2291; CHECK-NEXT:    [[TMP17:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP15]], half [[TMP16]])292; CHECK-NEXT:    store half [[TMP17]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 10), align 2293; CHECK-NEXT:    [[TMP18:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 12), align 4294; CHECK-NEXT:    [[TMP19:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 12), align 4295; CHECK-NEXT:    [[TMP20:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP18]], half [[TMP19]])296; CHECK-NEXT:    store half [[TMP20]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 12), align 4297; CHECK-NEXT:    [[TMP21:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 14), align 2298; CHECK-NEXT:    [[TMP22:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 14), align 2299; CHECK-NEXT:    [[TMP23:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP21]], half [[TMP22]])300; CHECK-NEXT:    store half [[TMP23]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 14), align 2301; CHECK-NEXT:    [[TMP24:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16302; CHECK-NEXT:    [[TMP25:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16303; CHECK-NEXT:    [[TMP26:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP24]], half [[TMP25]])304; CHECK-NEXT:    store half [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16305; CHECK-NEXT:    ret void306;307entry:308  %input0_0 = load half, ptr @input1_f16, align 16309  %input0_1 = load half, ptr @input2_f16, align 16310  %output0 = tail call half @llvm.minimumnum.f16(half %input0_0, half %input0_1)311  store half %output0, ptr @output_f16, align 16312  %input1_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 2), align 2313  %input1_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 2), align 2314  %output1 = tail call half @llvm.minimumnum.f16(half %input1_1, half %input1_2)315  store half %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 2), align 2316  %input2_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 4), align 4317  %input2_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 4), align 4318  %output2 = tail call half @llvm.minimumnum.f16(half %input2_1, half %input2_2)319  store half %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 4), align 4320  %input3_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 6), align 2321  %input3_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 6), align 2322  %output3 = tail call half @llvm.minimumnum.f16(half %input3_1, half %input3_2)323  store half %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 6), align 2324  %input4_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 8), align 8325  %input4_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 8), align 8326  %output4 = tail call half @llvm.minimumnum.f16(half %input4_1, half %input4_2)327  store half %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 8), align 8328  %input5_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 10), align 2329  %input5_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 10), align 2330  %output5 = tail call half @llvm.minimumnum.f16(half %input5_1, half %input5_2)331  store half %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 10), align 2332  %input6_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 12), align 4333  %input6_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 12), align 4334  %output6 = tail call half @llvm.minimumnum.f16(half %input6_1, half %input6_2)335  store half %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 12), align 4336  %input7_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 14), align 2337  %input7_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 14), align 2338  %output7 = tail call half @llvm.minimumnum.f16(half %input7_1, half %input7_2)339  store half %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 14), align 2340  %input8_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16341  %input8_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16342  %output8 = tail call half @llvm.minimumnum.f16(half %input8_1, half %input8_2)343  store half %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16344  ret void345}346 347declare half @llvm.minimumnum.f16(half, half)348 349define void @fmax16()  {350; CHECK-LABEL: define void @fmax16() {351; CHECK-NEXT:  [[ENTRY:.*:]]352; CHECK-NEXT:    [[TMP0:%.*]] = load half, ptr @input1_f16, align 16353; CHECK-NEXT:    [[TMP1:%.*]] = load half, ptr @input2_f16, align 16354; CHECK-NEXT:    [[TMP2:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP0]], half [[TMP1]])355; CHECK-NEXT:    store half [[TMP2]], ptr @output_f16, align 16356; CHECK-NEXT:    [[TMP3:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 2), align 2357; CHECK-NEXT:    [[TMP4:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 2), align 2358; CHECK-NEXT:    [[TMP5:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP3]], half [[TMP4]])359; CHECK-NEXT:    store half [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 2), align 2360; CHECK-NEXT:    [[TMP6:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 4), align 4361; CHECK-NEXT:    [[TMP7:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 4), align 4362; CHECK-NEXT:    [[TMP8:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP6]], half [[TMP7]])363; CHECK-NEXT:    store half [[TMP8]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 4), align 4364; CHECK-NEXT:    [[TMP9:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 6), align 2365; CHECK-NEXT:    [[TMP10:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 6), align 2366; CHECK-NEXT:    [[TMP11:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP9]], half [[TMP10]])367; CHECK-NEXT:    store half [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 6), align 2368; CHECK-NEXT:    [[TMP12:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 8), align 8369; CHECK-NEXT:    [[TMP13:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 8), align 8370; CHECK-NEXT:    [[TMP14:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP12]], half [[TMP13]])371; CHECK-NEXT:    store half [[TMP14]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 8), align 8372; CHECK-NEXT:    [[TMP15:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 10), align 2373; CHECK-NEXT:    [[TMP16:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 10), align 2374; CHECK-NEXT:    [[TMP17:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP15]], half [[TMP16]])375; CHECK-NEXT:    store half [[TMP17]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 10), align 2376; CHECK-NEXT:    [[TMP18:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 12), align 4377; CHECK-NEXT:    [[TMP19:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 12), align 4378; CHECK-NEXT:    [[TMP20:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP18]], half [[TMP19]])379; CHECK-NEXT:    store half [[TMP20]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 12), align 4380; CHECK-NEXT:    [[TMP21:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 14), align 2381; CHECK-NEXT:    [[TMP22:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 14), align 2382; CHECK-NEXT:    [[TMP23:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP21]], half [[TMP22]])383; CHECK-NEXT:    store half [[TMP23]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 14), align 2384; CHECK-NEXT:    [[TMP24:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16385; CHECK-NEXT:    [[TMP25:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16386; CHECK-NEXT:    [[TMP26:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP24]], half [[TMP25]])387; CHECK-NEXT:    store half [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16388; CHECK-NEXT:    ret void389;390entry:391  %input0_0 = load half, ptr @input1_f16, align 16392  %input0_1 = load half, ptr @input2_f16, align 16393  %output0 = tail call half @llvm.maximumnum.f16(half %input0_0, half %input0_1)394  store half %output0, ptr @output_f16, align 16395  %input1_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 2), align 2396  %input1_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 2), align 2397  %output1 = tail call half @llvm.maximumnum.f16(half %input1_1, half %input1_2)398  store half %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 2), align 2399  %input2_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 4), align 4400  %input2_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 4), align 4401  %output2 = tail call half @llvm.maximumnum.f16(half %input2_1, half %input2_2)402  store half %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 4), align 4403  %input3_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 6), align 2404  %input3_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 6), align 2405  %output3 = tail call half @llvm.maximumnum.f16(half %input3_1, half %input3_2)406  store half %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 6), align 2407  %input4_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 8), align 8408  %input4_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 8), align 8409  %output4 = tail call half @llvm.maximumnum.f16(half %input4_1, half %input4_2)410  store half %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 8), align 8411  %input5_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 10), align 2412  %input5_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 10), align 2413  %output5 = tail call half @llvm.maximumnum.f16(half %input5_1, half %input5_2)414  store half %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 10), align 2415  %input6_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 12), align 4416  %input6_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 12), align 4417  %output6 = tail call half @llvm.maximumnum.f16(half %input6_1, half %input6_2)418  store half %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 12), align 4419  %input7_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 14), align 2420  %input7_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 14), align 2421  %output7 = tail call half @llvm.maximumnum.f16(half %input7_1, half %input7_2)422  store half %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 14), align 2423  %input8_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16424  %input8_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16425  %output8 = tail call half @llvm.maximumnum.f16(half %input8_1, half %input8_2)426  store half %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16427  ret void428}429 430declare half @llvm.maximumnum.f16(half, half)431