brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.1 KiB · fcfc0e9 Raw
381 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt --passes=slp-vectorizer --mtriple=aarch64 -mattr="+neon,+fullfp16" -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-SAME: ) #[[ATTR0:[0-9]+]] {17; CHECK-NEXT:  [[ENTRY:.*:]]18; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr @input1_f32, align 1619; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr @input2_f32, align 1620; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])21; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @output_f32, align 1622; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 1623; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 1624; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> [[TMP3]], <4 x float> [[TMP4]])25; CHECK-NEXT:    store <4 x float> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 1626; CHECK-NEXT:    [[TMP24:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 1627; CHECK-NEXT:    [[TMP25:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 1628; CHECK-NEXT:    [[TMP26:%.*]] = tail call float @llvm.minimumnum.f32(float [[TMP24]], float [[TMP25]])29; CHECK-NEXT:    store float [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 1630; CHECK-NEXT:    ret void31;32entry:33  %input0_0 = load float, ptr @input1_f32, align 1634  %input0_1 = load float, ptr @input2_f32, align 1635  %output0 = tail call float @llvm.minimumnum.f32(float %input0_0, float %input0_1)36  store float %output0, ptr @output_f32, align 1637  %input1_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 4), align 438  %input1_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 4), align 439  %output1 = tail call float @llvm.minimumnum.f32(float %input1_1, float %input1_2)40  store float %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 4), align 441  %input2_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 8), align 842  %input2_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 8), align 843  %output2 = tail call float @llvm.minimumnum.f32(float %input2_1, float %input2_2)44  store float %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 8), align 845  %input3_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 12), align 446  %input3_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 12), align 447  %output3 = tail call float @llvm.minimumnum.f32(float %input3_1, float %input3_2)48  store float %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 12), align 449  %input4_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 1650  %input4_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 1651  %output4 = tail call float @llvm.minimumnum.f32(float %input4_1, float %input4_2)52  store float %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 1653  %input5_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 20), align 454  %input5_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 20), align 455  %output5 = tail call float @llvm.minimumnum.f32(float %input5_1, float %input5_2)56  store float %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 20), align 457  %input6_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 24), align 858  %input6_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 24), align 859  %output6 = tail call float @llvm.minimumnum.f32(float %input6_1, float %input6_2)60  store float %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 24), align 861  %input7_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 28), align 462  %input7_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 28), align 463  %output7 = tail call float @llvm.minimumnum.f32(float %input7_1, float %input7_2)64  store float %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 28), align 465  %input8_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 1666  %input8_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 1667  %output8 = tail call float @llvm.minimumnum.f32(float %input8_1, float %input8_2)68  store float %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 1669  ret void70}71 72declare float @llvm.minimumnum.f32(float, float)73 74define void @fmax32()  {75; CHECK-LABEL: define void @fmax32(76; CHECK-SAME: ) #[[ATTR0]] {77; CHECK-NEXT:  [[ENTRY:.*:]]78; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x float>, ptr @input1_f32, align 1679; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x float>, ptr @input2_f32, align 1680; CHECK-NEXT:    [[TMP2:%.*]] = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> [[TMP0]], <4 x float> [[TMP1]])81; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr @output_f32, align 1682; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 1683; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x float>, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 1684; CHECK-NEXT:    [[TMP5:%.*]] = call <4 x float> @llvm.maximumnum.v4f32(<4 x float> [[TMP3]], <4 x float> [[TMP4]])85; CHECK-NEXT:    store <4 x float> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 1686; CHECK-NEXT:    [[TMP24:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 1687; CHECK-NEXT:    [[TMP25:%.*]] = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 1688; CHECK-NEXT:    [[TMP26:%.*]] = tail call float @llvm.maximumnum.f32(float [[TMP24]], float [[TMP25]])89; CHECK-NEXT:    store float [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 1690; CHECK-NEXT:    ret void91;92entry:93  %input0_0 = load float, ptr @input1_f32, align 1694  %input0_1 = load float, ptr @input2_f32, align 1695  %output0 = tail call float @llvm.maximumnum.f32(float %input0_0, float %input0_1)96  store float %output0, ptr @output_f32, align 1697  %input1_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 4), align 498  %input1_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 4), align 499  %output1 = tail call float @llvm.maximumnum.f32(float %input1_1, float %input1_2)100  store float %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 4), align 4101  %input2_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 8), align 8102  %input2_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 8), align 8103  %output2 = tail call float @llvm.maximumnum.f32(float %input2_1, float %input2_2)104  store float %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 8), align 8105  %input3_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 12), align 4106  %input3_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 12), align 4107  %output3 = tail call float @llvm.maximumnum.f32(float %input3_1, float %input3_2)108  store float %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 12), align 4109  %input4_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 16), align 16110  %input4_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 16), align 16111  %output4 = tail call float @llvm.maximumnum.f32(float %input4_1, float %input4_2)112  store float %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 16), align 16113  %input5_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 20), align 4114  %input5_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 20), align 4115  %output5 = tail call float @llvm.maximumnum.f32(float %input5_1, float %input5_2)116  store float %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 20), align 4117  %input6_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 24), align 8118  %input6_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 24), align 8119  %output6 = tail call float @llvm.maximumnum.f32(float %input6_1, float %input6_2)120  store float %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 24), align 8121  %input7_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 28), align 4122  %input7_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 28), align 4123  %output7 = tail call float @llvm.maximumnum.f32(float %input7_1, float %input7_2)124  store float %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 28), align 4125  %input8_1 = load float, ptr getelementptr inbounds nuw (i8, ptr @input1_f32, i64 32), align 16126  %input8_2 = load float, ptr getelementptr inbounds nuw (i8, ptr @input2_f32, i64 32), align 16127  %output8 = tail call float @llvm.maximumnum.f32(float %input8_1, float %input8_2)128  store float %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f32, i64 32), align 16129  ret void130}131 132declare float @llvm.maximumnum.f32(float, float)133 134define void @fmin64()  {135; CHECK-LABEL: define void @fmin64(136; CHECK-SAME: ) #[[ATTR0]] {137; CHECK-NEXT:  [[ENTRY:.*:]]138; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr @input1_f64, align 16139; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr @input2_f64, align 16140; CHECK-NEXT:    [[TMP2:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP0]], <2 x double> [[TMP1]])141; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @output_f64, align 16142; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16143; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16144; CHECK-NEXT:    [[TMP5:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP3]], <2 x double> [[TMP4]])145; CHECK-NEXT:    store <2 x double> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16146; CHECK-NEXT:    [[TMP6:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16147; CHECK-NEXT:    [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16148; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP6]], <2 x double> [[TMP7]])149; CHECK-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16150; CHECK-NEXT:    [[TMP9:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16151; CHECK-NEXT:    [[TMP10:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16152; CHECK-NEXT:    [[TMP11:%.*]] = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> [[TMP9]], <2 x double> [[TMP10]])153; CHECK-NEXT:    store <2 x double> [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16154; CHECK-NEXT:    [[TMP24:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16155; CHECK-NEXT:    [[TMP25:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16156; CHECK-NEXT:    [[TMP26:%.*]] = tail call double @llvm.minimumnum.f64(double [[TMP24]], double [[TMP25]])157; CHECK-NEXT:    store double [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16158; CHECK-NEXT:    ret void159;160entry:161  %input0_0 = load double, ptr @input1_f64, align 16162  %input0_1 = load double, ptr @input2_f64, align 16163  %output0 = tail call double @llvm.minimumnum.f64(double %input0_0, double %input0_1)164  store double %output0, ptr @output_f64, align 16165  %input1_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 8), align 8166  %input1_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 8), align 8167  %output1 = tail call double @llvm.minimumnum.f64(double %input1_1, double %input1_2)168  store double %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 8), align 8169  %input2_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16170  %input2_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16171  %output2 = tail call double @llvm.minimumnum.f64(double %input2_1, double %input2_2)172  store double %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16173  %input3_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 24), align 8174  %input3_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 24), align 8175  %output3 = tail call double @llvm.minimumnum.f64(double %input3_1, double %input3_2)176  store double %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 24), align 8177  %input4_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16178  %input4_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16179  %output4 = tail call double @llvm.minimumnum.f64(double %input4_1, double %input4_2)180  store double %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16181  %input5_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 40), align 8182  %input5_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 40), align 8183  %output5 = tail call double @llvm.minimumnum.f64(double %input5_1, double %input5_2)184  store double %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 40), align 8185  %input6_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16186  %input6_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16187  %output6 = tail call double @llvm.minimumnum.f64(double %input6_1, double %input6_2)188  store double %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16189  %input7_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 56), align 8190  %input7_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 56), align 8191  %output7 = tail call double @llvm.minimumnum.f64(double %input7_1, double %input7_2)192  store double %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 56), align 8193  %input8_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16194  %input8_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16195  %output8 = tail call double @llvm.minimumnum.f64(double %input8_1, double %input8_2)196  store double %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16197  ret void198}199 200declare double @llvm.minimumnum.f64(double, double)201 202define void @fmax64()  {203; CHECK-LABEL: define void @fmax64(204; CHECK-SAME: ) #[[ATTR0]] {205; CHECK-NEXT:  [[ENTRY:.*:]]206; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr @input1_f64, align 16207; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr @input2_f64, align 16208; CHECK-NEXT:    [[TMP2:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP0]], <2 x double> [[TMP1]])209; CHECK-NEXT:    store <2 x double> [[TMP2]], ptr @output_f64, align 16210; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16211; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16212; CHECK-NEXT:    [[TMP5:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP3]], <2 x double> [[TMP4]])213; CHECK-NEXT:    store <2 x double> [[TMP5]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16214; CHECK-NEXT:    [[TMP6:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16215; CHECK-NEXT:    [[TMP7:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16216; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP6]], <2 x double> [[TMP7]])217; CHECK-NEXT:    store <2 x double> [[TMP8]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16218; CHECK-NEXT:    [[TMP9:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16219; CHECK-NEXT:    [[TMP10:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16220; CHECK-NEXT:    [[TMP11:%.*]] = call <2 x double> @llvm.maximumnum.v2f64(<2 x double> [[TMP9]], <2 x double> [[TMP10]])221; CHECK-NEXT:    store <2 x double> [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16222; CHECK-NEXT:    [[TMP24:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16223; CHECK-NEXT:    [[TMP25:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16224; CHECK-NEXT:    [[TMP26:%.*]] = tail call double @llvm.maximumnum.f64(double [[TMP24]], double [[TMP25]])225; CHECK-NEXT:    store double [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16226; CHECK-NEXT:    ret void227;228entry:229  %input0_0 = load double, ptr @input1_f64, align 16230  %input0_1 = load double, ptr @input2_f64, align 16231  %output0 = tail call double @llvm.maximumnum.f64(double %input0_0, double %input0_1)232  store double %output0, ptr @output_f64, align 16233  %input1_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 8), align 8234  %input1_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 8), align 8235  %output1 = tail call double @llvm.maximumnum.f64(double %input1_1, double %input1_2)236  store double %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 8), align 8237  %input2_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 16), align 16238  %input2_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 16), align 16239  %output2 = tail call double @llvm.maximumnum.f64(double %input2_1, double %input2_2)240  store double %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 16), align 16241  %input3_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 24), align 8242  %input3_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 24), align 8243  %output3 = tail call double @llvm.maximumnum.f64(double %input3_1, double %input3_2)244  store double %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 24), align 8245  %input4_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 32), align 16246  %input4_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 32), align 16247  %output4 = tail call double @llvm.maximumnum.f64(double %input4_1, double %input4_2)248  store double %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 32), align 16249  %input5_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 40), align 8250  %input5_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 40), align 8251  %output5 = tail call double @llvm.maximumnum.f64(double %input5_1, double %input5_2)252  store double %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 40), align 8253  %input6_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 48), align 16254  %input6_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 48), align 16255  %output6 = tail call double @llvm.maximumnum.f64(double %input6_1, double %input6_2)256  store double %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 48), align 16257  %input7_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 56), align 8258  %input7_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 56), align 8259  %output7 = tail call double @llvm.maximumnum.f64(double %input7_1, double %input7_2)260  store double %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 56), align 8261  %input8_1 = load double, ptr getelementptr inbounds nuw (i8, ptr @input1_f64, i64 64), align 16262  %input8_2 = load double, ptr getelementptr inbounds nuw (i8, ptr @input2_f64, i64 64), align 16263  %output8 = tail call double @llvm.maximumnum.f64(double %input8_1, double %input8_2)264  store double %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f64, i64 64), align 16265  ret void266}267 268declare double @llvm.maximumnum.f64(double, double)269 270define void @fmin16()  {271; CHECK-LABEL: define void @fmin16(272; CHECK-SAME: ) #[[ATTR0]] {273; CHECK-NEXT:  [[ENTRY:.*:]]274; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x half>, ptr @input1_f16, align 16275; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x half>, ptr @input2_f16, align 16276; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.minimumnum.v8f16(<8 x half> [[TMP0]], <8 x half> [[TMP1]])277; CHECK-NEXT:    store <8 x half> [[TMP2]], ptr @output_f16, align 16278; CHECK-NEXT:    [[TMP24:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16279; CHECK-NEXT:    [[TMP25:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16280; CHECK-NEXT:    [[TMP26:%.*]] = tail call half @llvm.minimumnum.f16(half [[TMP24]], half [[TMP25]])281; CHECK-NEXT:    store half [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16282; CHECK-NEXT:    ret void283;284entry:285  %input0_0 = load half, ptr @input1_f16, align 16286  %input0_1 = load half, ptr @input2_f16, align 16287  %output0 = tail call half @llvm.minimumnum.f16(half %input0_0, half %input0_1)288  store half %output0, ptr @output_f16, align 16289  %input1_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 2), align 2290  %input1_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 2), align 2291  %output1 = tail call half @llvm.minimumnum.f16(half %input1_1, half %input1_2)292  store half %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 2), align 2293  %input2_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 4), align 4294  %input2_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 4), align 4295  %output2 = tail call half @llvm.minimumnum.f16(half %input2_1, half %input2_2)296  store half %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 4), align 4297  %input3_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 6), align 2298  %input3_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 6), align 2299  %output3 = tail call half @llvm.minimumnum.f16(half %input3_1, half %input3_2)300  store half %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 6), align 2301  %input4_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 8), align 8302  %input4_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 8), align 8303  %output4 = tail call half @llvm.minimumnum.f16(half %input4_1, half %input4_2)304  store half %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 8), align 8305  %input5_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 10), align 2306  %input5_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 10), align 2307  %output5 = tail call half @llvm.minimumnum.f16(half %input5_1, half %input5_2)308  store half %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 10), align 2309  %input6_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 12), align 4310  %input6_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 12), align 4311  %output6 = tail call half @llvm.minimumnum.f16(half %input6_1, half %input6_2)312  store half %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 12), align 4313  %input7_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 14), align 2314  %input7_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 14), align 2315  %output7 = tail call half @llvm.minimumnum.f16(half %input7_1, half %input7_2)316  store half %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 14), align 2317  %input8_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16318  %input8_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16319  %output8 = tail call half @llvm.minimumnum.f16(half %input8_1, half %input8_2)320  store half %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16321  ret void322}323 324declare half @llvm.minimumnum.f16(half, half)325 326define void @fmax16()  {327; CHECK-LABEL: define void @fmax16(328; CHECK-SAME: ) #[[ATTR0]] {329; CHECK-NEXT:  [[ENTRY:.*:]]330; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x half>, ptr @input1_f16, align 16331; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x half>, ptr @input2_f16, align 16332; CHECK-NEXT:    [[TMP2:%.*]] = call <8 x half> @llvm.maximumnum.v8f16(<8 x half> [[TMP0]], <8 x half> [[TMP1]])333; CHECK-NEXT:    store <8 x half> [[TMP2]], ptr @output_f16, align 16334; CHECK-NEXT:    [[TMP24:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16335; CHECK-NEXT:    [[TMP25:%.*]] = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16336; CHECK-NEXT:    [[TMP26:%.*]] = tail call half @llvm.maximumnum.f16(half [[TMP24]], half [[TMP25]])337; CHECK-NEXT:    store half [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16338; CHECK-NEXT:    ret void339;340entry:341  %input0_0 = load half, ptr @input1_f16, align 16342  %input0_1 = load half, ptr @input2_f16, align 16343  %output0 = tail call half @llvm.maximumnum.f16(half %input0_0, half %input0_1)344  store half %output0, ptr @output_f16, align 16345  %input1_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 2), align 2346  %input1_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 2), align 2347  %output1 = tail call half @llvm.maximumnum.f16(half %input1_1, half %input1_2)348  store half %output1, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 2), align 2349  %input2_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 4), align 4350  %input2_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 4), align 4351  %output2 = tail call half @llvm.maximumnum.f16(half %input2_1, half %input2_2)352  store half %output2, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 4), align 4353  %input3_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 6), align 2354  %input3_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 6), align 2355  %output3 = tail call half @llvm.maximumnum.f16(half %input3_1, half %input3_2)356  store half %output3, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 6), align 2357  %input4_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 8), align 8358  %input4_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 8), align 8359  %output4 = tail call half @llvm.maximumnum.f16(half %input4_1, half %input4_2)360  store half %output4, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 8), align 8361  %input5_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 10), align 2362  %input5_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 10), align 2363  %output5 = tail call half @llvm.maximumnum.f16(half %input5_1, half %input5_2)364  store half %output5, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 10), align 2365  %input6_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 12), align 4366  %input6_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 12), align 4367  %output6 = tail call half @llvm.maximumnum.f16(half %input6_1, half %input6_2)368  store half %output6, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 12), align 4369  %input7_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 14), align 2370  %input7_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 14), align 2371  %output7 = tail call half @llvm.maximumnum.f16(half %input7_1, half %input7_2)372  store half %output7, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 14), align 2373  %input8_1 = load half, ptr getelementptr inbounds nuw (i8, ptr @input1_f16, i64 16), align 16374  %input8_2 = load half, ptr getelementptr inbounds nuw (i8, ptr @input2_f16, i64 16), align 16375  %output8 = tail call half @llvm.maximumnum.f16(half %input8_1, half %input8_2)376  store half %output8, ptr getelementptr inbounds nuw (i8, ptr @output_f16, i64 16), align 16377  ret void378}379 380declare half @llvm.maximumnum.f16(half, half)381