625 lines · plain
1; RUN: opt < %s -mtriple=aarch64--linux-gnu -passes="print<cost-model>" 2>&1 -disable-output | FileCheck %s --check-prefix=COST2; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s --check-prefix=CODE3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5 6; COST-LABEL: uaddl_8h7; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16>8; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i8> %b to <8 x i16>9; CODE-LABEL: uaddl_8h10; CODE: uaddl v0.8h, v0.8b, v1.8b11define <8 x i16> @uaddl_8h(<8 x i8> %a, <8 x i8> %b) {12 %tmp0 = zext <8 x i8> %a to <8 x i16>13 %tmp1 = zext <8 x i8> %b to <8 x i16>14 %tmp2 = add <8 x i16> %tmp0, %tmp115 ret <8 x i16> %tmp216}17 18; COST-LABEL: uaddl_4s19; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32>20; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i16> %b to <4 x i32>21; CODE-LABEL: uaddl_4s22; CODE: uaddl v0.4s, v0.4h, v1.4h23define <4 x i32> @uaddl_4s(<4 x i16> %a, <4 x i16> %b) {24 %tmp0 = zext <4 x i16> %a to <4 x i32>25 %tmp1 = zext <4 x i16> %b to <4 x i32>26 %tmp2 = add <4 x i32> %tmp0, %tmp127 ret <4 x i32> %tmp228}29 30; COST-LABEL: uaddl_2d31; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64>32; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <2 x i32> %b to <2 x i64>33; CODE-LABEL: uaddl_2d34; CODE: uaddl v0.2d, v0.2s, v1.2s35define <2 x i64> @uaddl_2d(<2 x i32> %a, <2 x i32> %b) {36 %tmp0 = zext <2 x i32> %a to <2 x i64>37 %tmp1 = zext <2 x i32> %b to <2 x i64>38 %tmp2 = add <2 x i64> %tmp0, %tmp139 ret <2 x i64> %tmp240}41 42; COST-LABEL: uaddl2_8h43; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16>44; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <16 x i8> %b to <16 x i16>45; CODE-LABEL: uaddl2_8h46; CODE: uaddl2 v2.8h, v0.16b, v1.16b47; CODE-NEXT: uaddl v0.8h, v0.8b, v1.8b48define <16 x i16> @uaddl2_8h(<16 x i8> %a, <16 x i8> %b) {49 %tmp0 = zext <16 x i8> %a to <16 x i16>50 %tmp1 = zext <16 x i8> %b to <16 x i16>51 %tmp2 = add <16 x i16> %tmp0, %tmp152 ret <16 x i16> %tmp253}54 55; COST-LABEL: uaddl2_4s56; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32>57; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i16> %b to <8 x i32>58; CODE-LABEL: uaddl2_4s59; CODE: uaddl2 v2.4s, v0.8h, v1.8h60; CODE-NEXT: uaddl v0.4s, v0.4h, v1.4h61define <8 x i32> @uaddl2_4s(<8 x i16> %a, <8 x i16> %b) {62 %tmp0 = zext <8 x i16> %a to <8 x i32>63 %tmp1 = zext <8 x i16> %b to <8 x i32>64 %tmp2 = add <8 x i32> %tmp0, %tmp165 ret <8 x i32> %tmp266}67 68; COST-LABEL: uaddl2_2d69; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64>70; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i32> %b to <4 x i64>71; CODE-LABEL: uaddl2_2d72; CODE: uaddl2 v2.2d, v0.4s, v1.4s73; CODE-NEXT: uaddl v0.2d, v0.2s, v1.2s74define <4 x i64> @uaddl2_2d(<4 x i32> %a, <4 x i32> %b) {75 %tmp0 = zext <4 x i32> %a to <4 x i64>76 %tmp1 = zext <4 x i32> %b to <4 x i64>77 %tmp2 = add <4 x i64> %tmp0, %tmp178 ret <4 x i64> %tmp279}80 81; COST-LABEL: saddl_8h82; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16>83; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i8> %b to <8 x i16>84; CODE-LABEL: saddl_8h85; CODE: saddl v0.8h, v0.8b, v1.8b86define <8 x i16> @saddl_8h(<8 x i8> %a, <8 x i8> %b) {87 %tmp0 = sext <8 x i8> %a to <8 x i16>88 %tmp1 = sext <8 x i8> %b to <8 x i16>89 %tmp2 = add <8 x i16> %tmp0, %tmp190 ret <8 x i16> %tmp291}92 93; COST-LABEL: saddl_4s94; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32>95; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i16> %b to <4 x i32>96; CODE-LABEL: saddl_4s97; CODE: saddl v0.4s, v0.4h, v1.4h98define <4 x i32> @saddl_4s(<4 x i16> %a, <4 x i16> %b) {99 %tmp0 = sext <4 x i16> %a to <4 x i32>100 %tmp1 = sext <4 x i16> %b to <4 x i32>101 %tmp2 = add <4 x i32> %tmp0, %tmp1102 ret <4 x i32> %tmp2103}104 105; COST-LABEL: saddl_2d106; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64>107; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <2 x i32> %b to <2 x i64>108; CODE-LABEL: saddl_2d109; CODE: saddl v0.2d, v0.2s, v1.2s110define <2 x i64> @saddl_2d(<2 x i32> %a, <2 x i32> %b) {111 %tmp0 = sext <2 x i32> %a to <2 x i64>112 %tmp1 = sext <2 x i32> %b to <2 x i64>113 %tmp2 = add <2 x i64> %tmp0, %tmp1114 ret <2 x i64> %tmp2115}116 117; COST-LABEL: saddl2_8h118; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16>119; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <16 x i8> %b to <16 x i16>120; CODE-LABEL: saddl2_8h121; CODE: saddl2 v2.8h, v0.16b, v1.16b122; CODE-NEXT: saddl v0.8h, v0.8b, v1.8b123define <16 x i16> @saddl2_8h(<16 x i8> %a, <16 x i8> %b) {124 %tmp0 = sext <16 x i8> %a to <16 x i16>125 %tmp1 = sext <16 x i8> %b to <16 x i16>126 %tmp2 = add <16 x i16> %tmp0, %tmp1127 ret <16 x i16> %tmp2128}129 130; COST-LABEL: saddl2_4s131; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32>132; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i16> %b to <8 x i32>133; CODE-LABEL: saddl2_4s134; CODE: saddl2 v2.4s, v0.8h, v1.8h135; CODE-NEXT: saddl v0.4s, v0.4h, v1.4h136define <8 x i32> @saddl2_4s(<8 x i16> %a, <8 x i16> %b) {137 %tmp0 = sext <8 x i16> %a to <8 x i32>138 %tmp1 = sext <8 x i16> %b to <8 x i32>139 %tmp2 = add <8 x i32> %tmp0, %tmp1140 ret <8 x i32> %tmp2141}142 143; COST-LABEL: saddl2_2d144; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64>145; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i32> %b to <4 x i64>146; CODE-LABEL: saddl2_2d147; CODE: saddl2 v2.2d, v0.4s, v1.4s148; CODE-NEXT: saddl v0.2d, v0.2s, v1.2s149define <4 x i64> @saddl2_2d(<4 x i32> %a, <4 x i32> %b) {150 %tmp0 = sext <4 x i32> %a to <4 x i64>151 %tmp1 = sext <4 x i32> %b to <4 x i64>152 %tmp2 = add <4 x i64> %tmp0, %tmp1153 ret <4 x i64> %tmp2154}155 156; COST-LABEL: usubl_8h157; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16>158; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i8> %b to <8 x i16>159; CODE-LABEL: usubl_8h160; CODE: usubl v0.8h, v0.8b, v1.8b161define <8 x i16> @usubl_8h(<8 x i8> %a, <8 x i8> %b) {162 %tmp0 = zext <8 x i8> %a to <8 x i16>163 %tmp1 = zext <8 x i8> %b to <8 x i16>164 %tmp2 = sub <8 x i16> %tmp0, %tmp1165 ret <8 x i16> %tmp2166}167 168; COST-LABEL: usubl_4s169; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32>170; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i16> %b to <4 x i32>171; CODE-LABEL: usubl_4s172; CODE: usubl v0.4s, v0.4h, v1.4h173define <4 x i32> @usubl_4s(<4 x i16> %a, <4 x i16> %b) {174 %tmp0 = zext <4 x i16> %a to <4 x i32>175 %tmp1 = zext <4 x i16> %b to <4 x i32>176 %tmp2 = sub <4 x i32> %tmp0, %tmp1177 ret <4 x i32> %tmp2178}179 180; COST-LABEL: usubl_2d181; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64>182; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <2 x i32> %b to <2 x i64>183; CODE-LABEL: usubl_2d184; CODE: usubl v0.2d, v0.2s, v1.2s185define <2 x i64> @usubl_2d(<2 x i32> %a, <2 x i32> %b) {186 %tmp0 = zext <2 x i32> %a to <2 x i64>187 %tmp1 = zext <2 x i32> %b to <2 x i64>188 %tmp2 = sub <2 x i64> %tmp0, %tmp1189 ret <2 x i64> %tmp2190}191 192; COST-LABEL: usubl2_8h193; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16>194; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <16 x i8> %b to <16 x i16>195; CODE-LABEL: usubl2_8h196; CODE: usubl2 v2.8h, v0.16b, v1.16b197; CODE-NEXT: usubl v0.8h, v0.8b, v1.8b198define <16 x i16> @usubl2_8h(<16 x i8> %a, <16 x i8> %b) {199 %tmp0 = zext <16 x i8> %a to <16 x i16>200 %tmp1 = zext <16 x i8> %b to <16 x i16>201 %tmp2 = sub <16 x i16> %tmp0, %tmp1202 ret <16 x i16> %tmp2203}204 205; COST-LABEL: usubl2_4s206; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32>207; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i16> %b to <8 x i32>208; CODE-LABEL: usubl2_4s209; CODE: usubl2 v2.4s, v0.8h, v1.8h210; CODE-NEXT: usubl v0.4s, v0.4h, v1.4h211define <8 x i32> @usubl2_4s(<8 x i16> %a, <8 x i16> %b) {212 %tmp0 = zext <8 x i16> %a to <8 x i32>213 %tmp1 = zext <8 x i16> %b to <8 x i32>214 %tmp2 = sub <8 x i32> %tmp0, %tmp1215 ret <8 x i32> %tmp2216}217 218; COST-LABEL: usubl2_2d219; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64>220; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i32> %b to <4 x i64>221; CODE-LABEL: usubl2_2d222; CODE: usubl2 v2.2d, v0.4s, v1.4s223; CODE-NEXT: usubl v0.2d, v0.2s, v1.2s224define <4 x i64> @usubl2_2d(<4 x i32> %a, <4 x i32> %b) {225 %tmp0 = zext <4 x i32> %a to <4 x i64>226 %tmp1 = zext <4 x i32> %b to <4 x i64>227 %tmp2 = sub <4 x i64> %tmp0, %tmp1228 ret <4 x i64> %tmp2229}230 231; COST-LABEL: ssubl_8h232; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16>233; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i8> %b to <8 x i16>234; CODE-LABEL: ssubl_8h235; CODE: ssubl v0.8h, v0.8b, v1.8b236define <8 x i16> @ssubl_8h(<8 x i8> %a, <8 x i8> %b) {237 %tmp0 = sext <8 x i8> %a to <8 x i16>238 %tmp1 = sext <8 x i8> %b to <8 x i16>239 %tmp2 = sub <8 x i16> %tmp0, %tmp1240 ret <8 x i16> %tmp2241}242 243; COST-LABEL: ssubl_4s244; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32>245; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i16> %b to <4 x i32>246; CODE-LABEL: ssubl_4s247; CODE: ssubl v0.4s, v0.4h, v1.4h248define <4 x i32> @ssubl_4s(<4 x i16> %a, <4 x i16> %b) {249 %tmp0 = sext <4 x i16> %a to <4 x i32>250 %tmp1 = sext <4 x i16> %b to <4 x i32>251 %tmp2 = sub <4 x i32> %tmp0, %tmp1252 ret <4 x i32> %tmp2253}254 255; COST-LABEL: ssubl_2d256; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64>257; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <2 x i32> %b to <2 x i64>258; CODE-LABEL: ssubl_2d259; CODE: ssubl v0.2d, v0.2s, v1.2s260define <2 x i64> @ssubl_2d(<2 x i32> %a, <2 x i32> %b) {261 %tmp0 = sext <2 x i32> %a to <2 x i64>262 %tmp1 = sext <2 x i32> %b to <2 x i64>263 %tmp2 = sub <2 x i64> %tmp0, %tmp1264 ret <2 x i64> %tmp2265}266 267; COST-LABEL: ssubl2_8h268; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16>269; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <16 x i8> %b to <16 x i16>270; CODE-LABEL: ssubl2_8h271; CODE: ssubl2 v2.8h, v0.16b, v1.16b272; CODE-NEXT: ssubl v0.8h, v0.8b, v1.8b273define <16 x i16> @ssubl2_8h(<16 x i8> %a, <16 x i8> %b) {274 %tmp0 = sext <16 x i8> %a to <16 x i16>275 %tmp1 = sext <16 x i8> %b to <16 x i16>276 %tmp2 = sub <16 x i16> %tmp0, %tmp1277 ret <16 x i16> %tmp2278}279 280; COST-LABEL: ssubl2_4s281; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32>282; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i16> %b to <8 x i32>283; CODE-LABEL: ssubl2_4s284; CODE: ssubl2 v2.4s, v0.8h, v1.8h285; CODE-NEXT: ssubl v0.4s, v0.4h, v1.4h286define <8 x i32> @ssubl2_4s(<8 x i16> %a, <8 x i16> %b) {287 %tmp0 = sext <8 x i16> %a to <8 x i32>288 %tmp1 = sext <8 x i16> %b to <8 x i32>289 %tmp2 = sub <8 x i32> %tmp0, %tmp1290 ret <8 x i32> %tmp2291}292 293; COST-LABEL: ssubl2_2d294; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64>295; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i32> %b to <4 x i64>296; CODE-LABEL: ssubl2_2d297; CODE: ssubl2 v2.2d, v0.4s, v1.4s298; CODE-NEXT: ssubl v0.2d, v0.2s, v1.2s299define <4 x i64> @ssubl2_2d(<4 x i32> %a, <4 x i32> %b) {300 %tmp0 = sext <4 x i32> %a to <4 x i64>301 %tmp1 = sext <4 x i32> %b to <4 x i64>302 %tmp2 = sub <4 x i64> %tmp0, %tmp1303 ret <4 x i64> %tmp2304}305 306; COST-LABEL: uaddw_8h307; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16>308; CODE-LABEL: uaddw_8h309; CODE: uaddw v0.8h, v1.8h, v0.8b310define <8 x i16> @uaddw_8h(<8 x i8> %a, <8 x i16> %b) {311 %tmp0 = zext <8 x i8> %a to <8 x i16>312 %tmp1 = add <8 x i16> %b, %tmp0313 ret <8 x i16> %tmp1314}315 316; COST-LABEL: uaddw_4s317; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32>318; CODE-LABEL: uaddw_4s319; CODE: uaddw v0.4s, v1.4s, v0.4h320define <4 x i32> @uaddw_4s(<4 x i16> %a, <4 x i32> %b) {321 %tmp0 = zext <4 x i16> %a to <4 x i32>322 %tmp1 = add <4 x i32> %b, %tmp0323 ret <4 x i32> %tmp1324}325 326; COST-LABEL: uaddw_2d327; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64>328; CODE-LABEL: uaddw_2d329; CODE: uaddw v0.2d, v1.2d, v0.2s330define <2 x i64> @uaddw_2d(<2 x i32> %a, <2 x i64> %b) {331 %tmp0 = zext <2 x i32> %a to <2 x i64>332 %tmp1 = add <2 x i64> %b, %tmp0333 ret <2 x i64> %tmp1334}335 336; COST-LABEL: uaddw2_8h337; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16>338; CODE-LABEL: uaddw2_8h339; CODE: uaddw2 v2.8h, v2.8h, v0.16b340; CODE-NEXT: uaddw v0.8h, v1.8h, v0.8b341define <16 x i16> @uaddw2_8h(<16 x i8> %a, <16 x i16> %b) {342 %tmp0 = zext <16 x i8> %a to <16 x i16>343 %tmp1 = add <16 x i16> %b, %tmp0344 ret <16 x i16> %tmp1345}346 347; COST-LABEL: uaddw2_4s348; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32>349; CODE-LABEL: uaddw2_4s350; CODE: uaddw2 v2.4s, v2.4s, v0.8h351; CODE-NEXT: uaddw v0.4s, v1.4s, v0.4h352define <8 x i32> @uaddw2_4s(<8 x i16> %a, <8 x i32> %b) {353 %tmp0 = zext <8 x i16> %a to <8 x i32>354 %tmp1 = add <8 x i32> %b, %tmp0355 ret <8 x i32> %tmp1356}357 358; COST-LABEL: uaddw2_2d359; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64>360; CODE-LABEL: uaddw2_2d361; CODE: uaddw2 v2.2d, v2.2d, v0.4s362; CODE-NEXT: uaddw v0.2d, v1.2d, v0.2s363define <4 x i64> @uaddw2_2d(<4 x i32> %a, <4 x i64> %b) {364 %tmp0 = zext <4 x i32> %a to <4 x i64>365 %tmp1 = add <4 x i64> %b, %tmp0366 ret <4 x i64> %tmp1367}368 369; COST-LABEL: saddw_8h370; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16>371; CODE-LABEL: saddw_8h372; CODE: saddw v0.8h, v1.8h, v0.8b373define <8 x i16> @saddw_8h(<8 x i8> %a, <8 x i16> %b) {374 %tmp0 = sext <8 x i8> %a to <8 x i16>375 %tmp1 = add <8 x i16> %b, %tmp0376 ret <8 x i16> %tmp1377}378 379; COST-LABEL: saddw_4s380; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32>381; CODE-LABEL: saddw_4s382; CODE: saddw v0.4s, v1.4s, v0.4h383define <4 x i32> @saddw_4s(<4 x i16> %a, <4 x i32> %b) {384 %tmp0 = sext <4 x i16> %a to <4 x i32>385 %tmp1 = add <4 x i32> %b, %tmp0386 ret <4 x i32> %tmp1387}388 389; COST-LABEL: saddw_2d390; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64>391; CODE-LABEL: saddw_2d392; CODE: saddw v0.2d, v1.2d, v0.2s393define <2 x i64> @saddw_2d(<2 x i32> %a, <2 x i64> %b) {394 %tmp0 = sext <2 x i32> %a to <2 x i64>395 %tmp1 = add <2 x i64> %b, %tmp0396 ret <2 x i64> %tmp1397}398 399; COST-LABEL: saddw2_8h400; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16>401; CODE-LABEL: saddw2_8h402; CODE: saddw2 v2.8h, v2.8h, v0.16b403; CODE-NEXT: saddw v0.8h, v1.8h, v0.8b404define <16 x i16> @saddw2_8h(<16 x i8> %a, <16 x i16> %b) {405 %tmp0 = sext <16 x i8> %a to <16 x i16>406 %tmp1 = add <16 x i16> %b, %tmp0407 ret <16 x i16> %tmp1408}409 410; COST-LABEL: saddw2_4s411; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32>412; CODE-LABEL: saddw2_4s413; CODE: saddw2 v2.4s, v2.4s, v0.8h414; CODE-NEXT: saddw v0.4s, v1.4s, v0.4h415define <8 x i32> @saddw2_4s(<8 x i16> %a, <8 x i32> %b) {416 %tmp0 = sext <8 x i16> %a to <8 x i32>417 %tmp1 = add <8 x i32> %b, %tmp0418 ret <8 x i32> %tmp1419}420 421; COST-LABEL: saddw2_2d422; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64>423; CODE-LABEL: saddw2_2d424; CODE: saddw2 v2.2d, v2.2d, v0.4s425; CODE-NEXT: saddw v0.2d, v1.2d, v0.2s426define <4 x i64> @saddw2_2d(<4 x i32> %a, <4 x i64> %b) {427 %tmp0 = sext <4 x i32> %a to <4 x i64>428 %tmp1 = add <4 x i64> %b, %tmp0429 ret <4 x i64> %tmp1430}431 432; COST-LABEL: usubw_8h433; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16>434; CODE-LABEL: usubw_8h435; CODE: usubw v0.8h, v1.8h, v0.8b436define <8 x i16> @usubw_8h(<8 x i8> %a, <8 x i16> %b) {437 %tmp0 = zext <8 x i8> %a to <8 x i16>438 %tmp1 = sub <8 x i16> %b, %tmp0439 ret <8 x i16> %tmp1440}441 442; COST-LABEL: usubw_4s443; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32>444; CODE-LABEL: usubw_4s445; CODE: usubw v0.4s, v1.4s, v0.4h446define <4 x i32> @usubw_4s(<4 x i16> %a, <4 x i32> %b) {447 %tmp0 = zext <4 x i16> %a to <4 x i32>448 %tmp1 = sub <4 x i32> %b, %tmp0449 ret <4 x i32> %tmp1450}451 452; COST-LABEL: usubw_2d453; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64>454; CODE-LABEL: usubw_2d455; CODE: usubw v0.2d, v1.2d, v0.2s456define <2 x i64> @usubw_2d(<2 x i32> %a, <2 x i64> %b) {457 %tmp0 = zext <2 x i32> %a to <2 x i64>458 %tmp1 = sub <2 x i64> %b, %tmp0459 ret <2 x i64> %tmp1460}461 462; COST-LABEL: usubw2_8h463; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16>464; CODE-LABEL: usubw2_8h465; CODE: usubw2 v2.8h, v2.8h, v0.16b466; CODE-NEXT: usubw v0.8h, v1.8h, v0.8b467define <16 x i16> @usubw2_8h(<16 x i8> %a, <16 x i16> %b) {468 %tmp0 = zext <16 x i8> %a to <16 x i16>469 %tmp1 = sub <16 x i16> %b, %tmp0470 ret <16 x i16> %tmp1471}472 473; COST-LABEL: usubw2_4s474; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32>475; CODE-LABEL: usubw2_4s476; CODE: usubw2 v2.4s, v2.4s, v0.8h477; CODE-NEXT: usubw v0.4s, v1.4s, v0.4h478define <8 x i32> @usubw2_4s(<8 x i16> %a, <8 x i32> %b) {479 %tmp0 = zext <8 x i16> %a to <8 x i32>480 %tmp1 = sub <8 x i32> %b, %tmp0481 ret <8 x i32> %tmp1482}483 484; COST-LABEL: usubw2_2d485; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64>486; CODE-LABEL: usubw2_2d487; CODE: usubw2 v2.2d, v2.2d, v0.4s488; CODE-NEXT: usubw v0.2d, v1.2d, v0.2s489define <4 x i64> @usubw2_2d(<4 x i32> %a, <4 x i64> %b) {490 %tmp0 = zext <4 x i32> %a to <4 x i64>491 %tmp1 = sub <4 x i64> %b, %tmp0492 ret <4 x i64> %tmp1493}494 495; COST-LABEL: ssubw_8h496; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16>497; CODE-LABEL: ssubw_8h498; CODE: ssubw v0.8h, v1.8h, v0.8b499define <8 x i16> @ssubw_8h(<8 x i8> %a, <8 x i16> %b) {500 %tmp0 = sext <8 x i8> %a to <8 x i16>501 %tmp1 = sub <8 x i16> %b, %tmp0502 ret <8 x i16> %tmp1503}504 505; COST-LABEL: ssubw_4s506; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32>507; CODE-LABEL: ssubw_4s508; CODE: ssubw v0.4s, v1.4s, v0.4h509define <4 x i32> @ssubw_4s(<4 x i16> %a, <4 x i32> %b) {510 %tmp0 = sext <4 x i16> %a to <4 x i32>511 %tmp1 = sub <4 x i32> %b, %tmp0512 ret <4 x i32> %tmp1513}514 515; COST-LABEL: ssubw_2d516; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64>517; CODE-LABEL: ssubw_2d518; CODE: ssubw v0.2d, v1.2d, v0.2s519define <2 x i64> @ssubw_2d(<2 x i32> %a, <2 x i64> %b) {520 %tmp0 = sext <2 x i32> %a to <2 x i64>521 %tmp1 = sub <2 x i64> %b, %tmp0522 ret <2 x i64> %tmp1523}524 525; COST-LABEL: ssubw2_8h526; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16>527; CODE-LABEL: ssubw2_8h528; CODE: ssubw2 v2.8h, v2.8h, v0.16b529; CODE-NEXT: ssubw v0.8h, v1.8h, v0.8b530define <16 x i16> @ssubw2_8h(<16 x i8> %a, <16 x i16> %b) {531 %tmp0 = sext <16 x i8> %a to <16 x i16>532 %tmp1 = sub <16 x i16> %b, %tmp0533 ret <16 x i16> %tmp1534}535 536; COST-LABEL: ssubw2_4s537; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32>538; CODE-LABEL: ssubw2_4s539; CODE: ssubw2 v2.4s, v2.4s, v0.8h540; CODE-NEXT: ssubw v0.4s, v1.4s, v0.4h541define <8 x i32> @ssubw2_4s(<8 x i16> %a, <8 x i32> %b) {542 %tmp0 = sext <8 x i16> %a to <8 x i32>543 %tmp1 = sub <8 x i32> %b, %tmp0544 ret <8 x i32> %tmp1545}546 547; COST-LABEL: ssubw2_2d548; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64>549; CODE-LABEL: ssubw2_2d550; CODE: ssubw2 v2.2d, v2.2d, v0.4s551; CODE-NEXT: ssubw v0.2d, v1.2d, v0.2s552define <4 x i64> @ssubw2_2d(<4 x i32> %a, <4 x i64> %b) {553 %tmp0 = sext <4 x i32> %a to <4 x i64>554 %tmp1 = sub <4 x i64> %b, %tmp0555 ret <4 x i64> %tmp1556}557 558; COST-LABEL: neg_wrong_operand_order559; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16>560define <8 x i16> @neg_wrong_operand_order(<8 x i8> %a, <8 x i16> %b) {561 %tmp0 = zext <8 x i8> %a to <8 x i16>562 %tmp1 = sub <8 x i16> %tmp0, %b563 ret <8 x i16> %tmp1564}565 566; COST-LABEL: neg_non_widening_op567; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16>568define <8 x i16> @neg_non_widening_op(<8 x i8> %a, <8 x i16> %b) {569 %tmp0 = zext <8 x i8> %a to <8 x i16>570 %tmp1 = udiv <8 x i16> %b, %tmp0571 ret <8 x i16> %tmp1572}573 574; COST-LABEL: neg_dissimilar_operand_kind_0575; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16>576; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i8> %b to <8 x i16>577define <8 x i16> @neg_dissimilar_operand_kind_0(<8 x i8> %a, <8 x i8> %b) {578 %tmp0 = sext <8 x i8> %a to <8 x i16>579 %tmp1 = zext <8 x i8> %b to <8 x i16>580 %tmp2 = add <8 x i16> %tmp0, %tmp1581 ret <8 x i16> %tmp2582}583 584; COST-LABEL: neg_dissimilar_operand_kind_1585; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <4 x i8> %a to <4 x i32>586; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i16> %b to <4 x i32>587define <4 x i32> @neg_dissimilar_operand_kind_1(<4 x i8> %a, <4 x i16> %b) {588 %tmp0 = zext <4 x i8> %a to <4 x i32>589 %tmp1 = zext <4 x i16> %b to <4 x i32>590 %tmp2 = add <4 x i32> %tmp0, %tmp1591 ret <4 x i32> %tmp2592}593 594; COST-LABEL: neg_illegal_vector_type_0595; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <16 x i4> %a to <16 x i8>596define <16 x i8> @neg_illegal_vector_type_0(<16 x i4> %a, <16 x i8> %b) {597 %tmp0 = zext <16 x i4> %a to <16 x i8>598 %tmp1 = sub <16 x i8> %b, %tmp0599 ret <16 x i8> %tmp1600}601 602; COST-LABEL: neg_llegal_vector_type_1603; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <1 x i16> %a to <1 x i32>604define <1 x i32> @neg_llegal_vector_type_1(<1 x i16> %a, <1 x i32> %b) {605 %tmp0 = zext <1 x i16> %a to <1 x i32>606 %tmp1 = add <1 x i32> %b, %tmp0607 ret <1 x i32> %tmp1608}609 610; COST-LABEL: neg_llegal_vector_type_2611; COST-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i64>612define <4 x i64> @neg_llegal_vector_type_2(<4 x i16> %a, <4 x i64> %b) {613 %tmp0 = zext <4 x i16> %a to <4 x i64>614 %tmp1 = add <4 x i64> %b, %tmp0615 ret <4 x i64> %tmp1616}617 618; COST-LABEL: neg_llegal_vector_type_3619; COST-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %tmp0 = zext <3 x i34> %a to <3 x i68>620define <3 x i68> @neg_llegal_vector_type_3(<3 x i34> %a, <3 x i68> %b) {621 %tmp0 = zext <3 x i34> %a to <3 x i68>622 %tmp1 = add <3 x i68> %b, %tmp0623 ret <3 x i68> %tmp1624}625