| ; RUN: opt < %s -mtriple=aarch64--linux-gnu -cost-model -analyze | FileCheck %s --check-prefix=COST |
| ; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s --check-prefix=CODE |
| |
| ; COST-LABEL: uaddl_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i8> %b to <8 x i16> |
| ; CODE-LABEL: uaddl_8h |
| ; CODE: uaddl v0.8h, v0.8b, v1.8b |
| define <8 x i16> @uaddl_8h(<8 x i8> %a, <8 x i8> %b) { |
| %tmp0 = zext <8 x i8> %a to <8 x i16> |
| %tmp1 = zext <8 x i8> %b to <8 x i16> |
| %tmp2 = add <8 x i16> %tmp0, %tmp1 |
| ret <8 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: uaddl_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i16> %b to <4 x i32> |
| ; CODE-LABEL: uaddl_4s |
| ; CODE: uaddl v0.4s, v0.4h, v1.4h |
| define <4 x i32> @uaddl_4s(<4 x i16> %a, <4 x i16> %b) { |
| %tmp0 = zext <4 x i16> %a to <4 x i32> |
| %tmp1 = zext <4 x i16> %b to <4 x i32> |
| %tmp2 = add <4 x i32> %tmp0, %tmp1 |
| ret <4 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: uaddl_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <2 x i32> %b to <2 x i64> |
| ; CODE-LABEL: uaddl_2d |
| ; CODE: uaddl v0.2d, v0.2s, v1.2s |
| define <2 x i64> @uaddl_2d(<2 x i32> %a, <2 x i32> %b) { |
| %tmp0 = zext <2 x i32> %a to <2 x i64> |
| %tmp1 = zext <2 x i32> %b to <2 x i64> |
| %tmp2 = add <2 x i64> %tmp0, %tmp1 |
| ret <2 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: uaddl2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <16 x i8> %b to <16 x i16> |
| ; CODE-LABEL: uaddl2_8h |
| ; CODE: uaddl2 v2.8h, v0.16b, v1.16b |
| ; CODE-NEXT: uaddl v0.8h, v0.8b, v1.8b |
| define <16 x i16> @uaddl2_8h(<16 x i8> %a, <16 x i8> %b) { |
| %tmp0 = zext <16 x i8> %a to <16 x i16> |
| %tmp1 = zext <16 x i8> %b to <16 x i16> |
| %tmp2 = add <16 x i16> %tmp0, %tmp1 |
| ret <16 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: uaddl2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i16> %b to <8 x i32> |
| ; CODE-LABEL: uaddl2_4s |
| ; CODE: uaddl2 v2.4s, v0.8h, v1.8h |
| ; CODE-NEXT: uaddl v0.4s, v0.4h, v1.4h |
| define <8 x i32> @uaddl2_4s(<8 x i16> %a, <8 x i16> %b) { |
| %tmp0 = zext <8 x i16> %a to <8 x i32> |
| %tmp1 = zext <8 x i16> %b to <8 x i32> |
| %tmp2 = add <8 x i32> %tmp0, %tmp1 |
| ret <8 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: uaddl2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i32> %b to <4 x i64> |
| ; CODE-LABEL: uaddl2_2d |
| ; CODE: uaddl2 v2.2d, v0.4s, v1.4s |
| ; CODE-NEXT: uaddl v0.2d, v0.2s, v1.2s |
| define <4 x i64> @uaddl2_2d(<4 x i32> %a, <4 x i32> %b) { |
| %tmp0 = zext <4 x i32> %a to <4 x i64> |
| %tmp1 = zext <4 x i32> %b to <4 x i64> |
| %tmp2 = add <4 x i64> %tmp0, %tmp1 |
| ret <4 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: saddl_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i8> %b to <8 x i16> |
| ; CODE-LABEL: saddl_8h |
| ; CODE: saddl v0.8h, v0.8b, v1.8b |
| define <8 x i16> @saddl_8h(<8 x i8> %a, <8 x i8> %b) { |
| %tmp0 = sext <8 x i8> %a to <8 x i16> |
| %tmp1 = sext <8 x i8> %b to <8 x i16> |
| %tmp2 = add <8 x i16> %tmp0, %tmp1 |
| ret <8 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: saddl_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i16> %b to <4 x i32> |
| ; CODE-LABEL: saddl_4s |
| ; CODE: saddl v0.4s, v0.4h, v1.4h |
| define <4 x i32> @saddl_4s(<4 x i16> %a, <4 x i16> %b) { |
| %tmp0 = sext <4 x i16> %a to <4 x i32> |
| %tmp1 = sext <4 x i16> %b to <4 x i32> |
| %tmp2 = add <4 x i32> %tmp0, %tmp1 |
| ret <4 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: saddl_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <2 x i32> %b to <2 x i64> |
| ; CODE-LABEL: saddl_2d |
| ; CODE: saddl v0.2d, v0.2s, v1.2s |
| define <2 x i64> @saddl_2d(<2 x i32> %a, <2 x i32> %b) { |
| %tmp0 = sext <2 x i32> %a to <2 x i64> |
| %tmp1 = sext <2 x i32> %b to <2 x i64> |
| %tmp2 = add <2 x i64> %tmp0, %tmp1 |
| ret <2 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: saddl2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <16 x i8> %b to <16 x i16> |
| ; CODE-LABEL: saddl2_8h |
| ; CODE: saddl2 v2.8h, v0.16b, v1.16b |
| ; CODE-NEXT: saddl v0.8h, v0.8b, v1.8b |
| define <16 x i16> @saddl2_8h(<16 x i8> %a, <16 x i8> %b) { |
| %tmp0 = sext <16 x i8> %a to <16 x i16> |
| %tmp1 = sext <16 x i8> %b to <16 x i16> |
| %tmp2 = add <16 x i16> %tmp0, %tmp1 |
| ret <16 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: saddl2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i16> %b to <8 x i32> |
| ; CODE-LABEL: saddl2_4s |
| ; CODE: saddl2 v2.4s, v0.8h, v1.8h |
| ; CODE-NEXT: saddl v0.4s, v0.4h, v1.4h |
| define <8 x i32> @saddl2_4s(<8 x i16> %a, <8 x i16> %b) { |
| %tmp0 = sext <8 x i16> %a to <8 x i32> |
| %tmp1 = sext <8 x i16> %b to <8 x i32> |
| %tmp2 = add <8 x i32> %tmp0, %tmp1 |
| ret <8 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: saddl2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i32> %b to <4 x i64> |
| ; CODE-LABEL: saddl2_2d |
| ; CODE: saddl2 v2.2d, v0.4s, v1.4s |
| ; CODE-NEXT: saddl v0.2d, v0.2s, v1.2s |
| define <4 x i64> @saddl2_2d(<4 x i32> %a, <4 x i32> %b) { |
| %tmp0 = sext <4 x i32> %a to <4 x i64> |
| %tmp1 = sext <4 x i32> %b to <4 x i64> |
| %tmp2 = add <4 x i64> %tmp0, %tmp1 |
| ret <4 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: usubl_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i8> %b to <8 x i16> |
| ; CODE-LABEL: usubl_8h |
| ; CODE: usubl v0.8h, v0.8b, v1.8b |
| define <8 x i16> @usubl_8h(<8 x i8> %a, <8 x i8> %b) { |
| %tmp0 = zext <8 x i8> %a to <8 x i16> |
| %tmp1 = zext <8 x i8> %b to <8 x i16> |
| %tmp2 = sub <8 x i16> %tmp0, %tmp1 |
| ret <8 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: usubl_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i16> %b to <4 x i32> |
| ; CODE-LABEL: usubl_4s |
| ; CODE: usubl v0.4s, v0.4h, v1.4h |
| define <4 x i32> @usubl_4s(<4 x i16> %a, <4 x i16> %b) { |
| %tmp0 = zext <4 x i16> %a to <4 x i32> |
| %tmp1 = zext <4 x i16> %b to <4 x i32> |
| %tmp2 = sub <4 x i32> %tmp0, %tmp1 |
| ret <4 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: usubl_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <2 x i32> %b to <2 x i64> |
| ; CODE-LABEL: usubl_2d |
| ; CODE: usubl v0.2d, v0.2s, v1.2s |
| define <2 x i64> @usubl_2d(<2 x i32> %a, <2 x i32> %b) { |
| %tmp0 = zext <2 x i32> %a to <2 x i64> |
| %tmp1 = zext <2 x i32> %b to <2 x i64> |
| %tmp2 = sub <2 x i64> %tmp0, %tmp1 |
| ret <2 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: usubl2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <16 x i8> %b to <16 x i16> |
| ; CODE-LABEL: usubl2_8h |
| ; CODE: usubl2 v2.8h, v0.16b, v1.16b |
| ; CODE-NEXT: usubl v0.8h, v0.8b, v1.8b |
| define <16 x i16> @usubl2_8h(<16 x i8> %a, <16 x i8> %b) { |
| %tmp0 = zext <16 x i8> %a to <16 x i16> |
| %tmp1 = zext <16 x i8> %b to <16 x i16> |
| %tmp2 = sub <16 x i16> %tmp0, %tmp1 |
| ret <16 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: usubl2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i16> %b to <8 x i32> |
| ; CODE-LABEL: usubl2_4s |
| ; CODE: usubl2 v2.4s, v0.8h, v1.8h |
| ; CODE-NEXT: usubl v0.4s, v0.4h, v1.4h |
| define <8 x i32> @usubl2_4s(<8 x i16> %a, <8 x i16> %b) { |
| %tmp0 = zext <8 x i16> %a to <8 x i32> |
| %tmp1 = zext <8 x i16> %b to <8 x i32> |
| %tmp2 = sub <8 x i32> %tmp0, %tmp1 |
| ret <8 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: usubl2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i32> %b to <4 x i64> |
| ; CODE-LABEL: usubl2_2d |
| ; CODE: usubl2 v2.2d, v0.4s, v1.4s |
| ; CODE-NEXT: usubl v0.2d, v0.2s, v1.2s |
| define <4 x i64> @usubl2_2d(<4 x i32> %a, <4 x i32> %b) { |
| %tmp0 = zext <4 x i32> %a to <4 x i64> |
| %tmp1 = zext <4 x i32> %b to <4 x i64> |
| %tmp2 = sub <4 x i64> %tmp0, %tmp1 |
| ret <4 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: ssubl_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i8> %b to <8 x i16> |
| ; CODE-LABEL: ssubl_8h |
| ; CODE: ssubl v0.8h, v0.8b, v1.8b |
| define <8 x i16> @ssubl_8h(<8 x i8> %a, <8 x i8> %b) { |
| %tmp0 = sext <8 x i8> %a to <8 x i16> |
| %tmp1 = sext <8 x i8> %b to <8 x i16> |
| %tmp2 = sub <8 x i16> %tmp0, %tmp1 |
| ret <8 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: ssubl_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i16> %b to <4 x i32> |
| ; CODE-LABEL: ssubl_4s |
| ; CODE: ssubl v0.4s, v0.4h, v1.4h |
| define <4 x i32> @ssubl_4s(<4 x i16> %a, <4 x i16> %b) { |
| %tmp0 = sext <4 x i16> %a to <4 x i32> |
| %tmp1 = sext <4 x i16> %b to <4 x i32> |
| %tmp2 = sub <4 x i32> %tmp0, %tmp1 |
| ret <4 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: ssubl_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <2 x i32> %b to <2 x i64> |
| ; CODE-LABEL: ssubl_2d |
| ; CODE: ssubl v0.2d, v0.2s, v1.2s |
| define <2 x i64> @ssubl_2d(<2 x i32> %a, <2 x i32> %b) { |
| %tmp0 = sext <2 x i32> %a to <2 x i64> |
| %tmp1 = sext <2 x i32> %b to <2 x i64> |
| %tmp2 = sub <2 x i64> %tmp0, %tmp1 |
| ret <2 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: ssubl2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <16 x i8> %b to <16 x i16> |
| ; CODE-LABEL: ssubl2_8h |
| ; CODE: ssubl2 v2.8h, v0.16b, v1.16b |
| ; CODE-NEXT: ssubl v0.8h, v0.8b, v1.8b |
| define <16 x i16> @ssubl2_8h(<16 x i8> %a, <16 x i8> %b) { |
| %tmp0 = sext <16 x i8> %a to <16 x i16> |
| %tmp1 = sext <16 x i8> %b to <16 x i16> |
| %tmp2 = sub <16 x i16> %tmp0, %tmp1 |
| ret <16 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: ssubl2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <8 x i16> %b to <8 x i32> |
| ; CODE-LABEL: ssubl2_4s |
| ; CODE: ssubl2 v2.4s, v0.8h, v1.8h |
| ; CODE-NEXT: ssubl v0.4s, v0.4h, v1.4h |
| define <8 x i32> @ssubl2_4s(<8 x i16> %a, <8 x i16> %b) { |
| %tmp0 = sext <8 x i16> %a to <8 x i32> |
| %tmp1 = sext <8 x i16> %b to <8 x i32> |
| %tmp2 = sub <8 x i32> %tmp0, %tmp1 |
| ret <8 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: ssubl2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = sext <4 x i32> %b to <4 x i64> |
| ; CODE-LABEL: ssubl2_2d |
| ; CODE: ssubl2 v2.2d, v0.4s, v1.4s |
| ; CODE-NEXT: ssubl v0.2d, v0.2s, v1.2s |
| define <4 x i64> @ssubl2_2d(<4 x i32> %a, <4 x i32> %b) { |
| %tmp0 = sext <4 x i32> %a to <4 x i64> |
| %tmp1 = sext <4 x i32> %b to <4 x i64> |
| %tmp2 = sub <4 x i64> %tmp0, %tmp1 |
| ret <4 x i64> %tmp2 |
| } |
| |
| ; COST-LABEL: uaddw_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16> |
| ; CODE-LABEL: uaddw_8h |
| ; CODE: uaddw v0.8h, v1.8h, v0.8b |
| define <8 x i16> @uaddw_8h(<8 x i8> %a, <8 x i16> %b) { |
| %tmp0 = zext <8 x i8> %a to <8 x i16> |
| %tmp1 = add <8 x i16> %b, %tmp0 |
| ret <8 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: uaddw_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32> |
| ; CODE-LABEL: uaddw_4s |
| ; CODE: uaddw v0.4s, v1.4s, v0.4h |
| define <4 x i32> @uaddw_4s(<4 x i16> %a, <4 x i32> %b) { |
| %tmp0 = zext <4 x i16> %a to <4 x i32> |
| %tmp1 = add <4 x i32> %b, %tmp0 |
| ret <4 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: uaddw_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64> |
| ; CODE-LABEL: uaddw_2d |
| ; CODE: uaddw v0.2d, v1.2d, v0.2s |
| define <2 x i64> @uaddw_2d(<2 x i32> %a, <2 x i64> %b) { |
| %tmp0 = zext <2 x i32> %a to <2 x i64> |
| %tmp1 = add <2 x i64> %b, %tmp0 |
| ret <2 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: uaddw2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16> |
| ; CODE-LABEL: uaddw2_8h |
| ; CODE: uaddw2 v2.8h, v2.8h, v0.16b |
| ; CODE-NEXT: uaddw v0.8h, v1.8h, v0.8b |
| define <16 x i16> @uaddw2_8h(<16 x i8> %a, <16 x i16> %b) { |
| %tmp0 = zext <16 x i8> %a to <16 x i16> |
| %tmp1 = add <16 x i16> %b, %tmp0 |
| ret <16 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: uaddw2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32> |
| ; CODE-LABEL: uaddw2_4s |
| ; CODE: uaddw2 v2.4s, v2.4s, v0.8h |
| ; CODE-NEXT: uaddw v0.4s, v1.4s, v0.4h |
| define <8 x i32> @uaddw2_4s(<8 x i16> %a, <8 x i32> %b) { |
| %tmp0 = zext <8 x i16> %a to <8 x i32> |
| %tmp1 = add <8 x i32> %b, %tmp0 |
| ret <8 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: uaddw2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64> |
| ; CODE-LABEL: uaddw2_2d |
| ; CODE: uaddw2 v2.2d, v2.2d, v0.4s |
| ; CODE-NEXT: uaddw v0.2d, v1.2d, v0.2s |
| define <4 x i64> @uaddw2_2d(<4 x i32> %a, <4 x i64> %b) { |
| %tmp0 = zext <4 x i32> %a to <4 x i64> |
| %tmp1 = add <4 x i64> %b, %tmp0 |
| ret <4 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: saddw_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16> |
| ; CODE-LABEL: saddw_8h |
| ; CODE: saddw v0.8h, v1.8h, v0.8b |
| define <8 x i16> @saddw_8h(<8 x i8> %a, <8 x i16> %b) { |
| %tmp0 = sext <8 x i8> %a to <8 x i16> |
| %tmp1 = add <8 x i16> %b, %tmp0 |
| ret <8 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: saddw_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32> |
| ; CODE-LABEL: saddw_4s |
| ; CODE: saddw v0.4s, v1.4s, v0.4h |
| define <4 x i32> @saddw_4s(<4 x i16> %a, <4 x i32> %b) { |
| %tmp0 = sext <4 x i16> %a to <4 x i32> |
| %tmp1 = add <4 x i32> %b, %tmp0 |
| ret <4 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: saddw_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64> |
| ; CODE-LABEL: saddw_2d |
| ; CODE: saddw v0.2d, v1.2d, v0.2s |
| define <2 x i64> @saddw_2d(<2 x i32> %a, <2 x i64> %b) { |
| %tmp0 = sext <2 x i32> %a to <2 x i64> |
| %tmp1 = add <2 x i64> %b, %tmp0 |
| ret <2 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: saddw2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16> |
| ; CODE-LABEL: saddw2_8h |
| ; CODE: saddw2 v2.8h, v2.8h, v0.16b |
| ; CODE-NEXT: saddw v0.8h, v1.8h, v0.8b |
| define <16 x i16> @saddw2_8h(<16 x i8> %a, <16 x i16> %b) { |
| %tmp0 = sext <16 x i8> %a to <16 x i16> |
| %tmp1 = add <16 x i16> %b, %tmp0 |
| ret <16 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: saddw2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32> |
| ; CODE-LABEL: saddw2_4s |
| ; CODE: saddw2 v2.4s, v2.4s, v0.8h |
| ; CODE-NEXT: saddw v0.4s, v1.4s, v0.4h |
| define <8 x i32> @saddw2_4s(<8 x i16> %a, <8 x i32> %b) { |
| %tmp0 = sext <8 x i16> %a to <8 x i32> |
| %tmp1 = add <8 x i32> %b, %tmp0 |
| ret <8 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: saddw2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64> |
| ; CODE-LABEL: saddw2_2d |
| ; CODE: saddw2 v2.2d, v2.2d, v0.4s |
| ; CODE-NEXT: saddw v0.2d, v1.2d, v0.2s |
| define <4 x i64> @saddw2_2d(<4 x i32> %a, <4 x i64> %b) { |
| %tmp0 = sext <4 x i32> %a to <4 x i64> |
| %tmp1 = add <4 x i64> %b, %tmp0 |
| ret <4 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: usubw_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16> |
| ; CODE-LABEL: usubw_8h |
| ; CODE: usubw v0.8h, v1.8h, v0.8b |
| define <8 x i16> @usubw_8h(<8 x i8> %a, <8 x i16> %b) { |
| %tmp0 = zext <8 x i8> %a to <8 x i16> |
| %tmp1 = sub <8 x i16> %b, %tmp0 |
| ret <8 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: usubw_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i32> |
| ; CODE-LABEL: usubw_4s |
| ; CODE: usubw v0.4s, v1.4s, v0.4h |
| define <4 x i32> @usubw_4s(<4 x i16> %a, <4 x i32> %b) { |
| %tmp0 = zext <4 x i16> %a to <4 x i32> |
| %tmp1 = sub <4 x i32> %b, %tmp0 |
| ret <4 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: usubw_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <2 x i32> %a to <2 x i64> |
| ; CODE-LABEL: usubw_2d |
| ; CODE: usubw v0.2d, v1.2d, v0.2s |
| define <2 x i64> @usubw_2d(<2 x i32> %a, <2 x i64> %b) { |
| %tmp0 = zext <2 x i32> %a to <2 x i64> |
| %tmp1 = sub <2 x i64> %b, %tmp0 |
| ret <2 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: usubw2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <16 x i8> %a to <16 x i16> |
| ; CODE-LABEL: usubw2_8h |
| ; CODE: usubw2 v2.8h, v2.8h, v0.16b |
| ; CODE-NEXT: usubw v0.8h, v1.8h, v0.8b |
| define <16 x i16> @usubw2_8h(<16 x i8> %a, <16 x i16> %b) { |
| %tmp0 = zext <16 x i8> %a to <16 x i16> |
| %tmp1 = sub <16 x i16> %b, %tmp0 |
| ret <16 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: usubw2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <8 x i16> %a to <8 x i32> |
| ; CODE-LABEL: usubw2_4s |
| ; CODE: usubw2 v2.4s, v2.4s, v0.8h |
| ; CODE-NEXT: usubw v0.4s, v1.4s, v0.4h |
| define <8 x i32> @usubw2_4s(<8 x i16> %a, <8 x i32> %b) { |
| %tmp0 = zext <8 x i16> %a to <8 x i32> |
| %tmp1 = sub <8 x i32> %b, %tmp0 |
| ret <8 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: usubw2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = zext <4 x i32> %a to <4 x i64> |
| ; CODE-LABEL: usubw2_2d |
| ; CODE: usubw2 v2.2d, v2.2d, v0.4s |
| ; CODE-NEXT: usubw v0.2d, v1.2d, v0.2s |
| define <4 x i64> @usubw2_2d(<4 x i32> %a, <4 x i64> %b) { |
| %tmp0 = zext <4 x i32> %a to <4 x i64> |
| %tmp1 = sub <4 x i64> %b, %tmp0 |
| ret <4 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: ssubw_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16> |
| ; CODE-LABEL: ssubw_8h |
| ; CODE: ssubw v0.8h, v1.8h, v0.8b |
| define <8 x i16> @ssubw_8h(<8 x i8> %a, <8 x i16> %b) { |
| %tmp0 = sext <8 x i8> %a to <8 x i16> |
| %tmp1 = sub <8 x i16> %b, %tmp0 |
| ret <8 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: ssubw_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i16> %a to <4 x i32> |
| ; CODE-LABEL: ssubw_4s |
| ; CODE: ssubw v0.4s, v1.4s, v0.4h |
| define <4 x i32> @ssubw_4s(<4 x i16> %a, <4 x i32> %b) { |
| %tmp0 = sext <4 x i16> %a to <4 x i32> |
| %tmp1 = sub <4 x i32> %b, %tmp0 |
| ret <4 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: ssubw_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <2 x i32> %a to <2 x i64> |
| ; CODE-LABEL: ssubw_2d |
| ; CODE: ssubw v0.2d, v1.2d, v0.2s |
| define <2 x i64> @ssubw_2d(<2 x i32> %a, <2 x i64> %b) { |
| %tmp0 = sext <2 x i32> %a to <2 x i64> |
| %tmp1 = sub <2 x i64> %b, %tmp0 |
| ret <2 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: ssubw2_8h |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <16 x i8> %a to <16 x i16> |
| ; CODE-LABEL: ssubw2_8h |
| ; CODE: ssubw2 v2.8h, v2.8h, v0.16b |
| ; CODE-NEXT: ssubw v0.8h, v1.8h, v0.8b |
| define <16 x i16> @ssubw2_8h(<16 x i8> %a, <16 x i16> %b) { |
| %tmp0 = sext <16 x i8> %a to <16 x i16> |
| %tmp1 = sub <16 x i16> %b, %tmp0 |
| ret <16 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: ssubw2_4s |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <8 x i16> %a to <8 x i32> |
| ; CODE-LABEL: ssubw2_4s |
| ; CODE: ssubw2 v2.4s, v2.4s, v0.8h |
| ; CODE-NEXT: ssubw v0.4s, v1.4s, v0.4h |
| define <8 x i32> @ssubw2_4s(<8 x i16> %a, <8 x i32> %b) { |
| %tmp0 = sext <8 x i16> %a to <8 x i32> |
| %tmp1 = sub <8 x i32> %b, %tmp0 |
| ret <8 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: ssubw2_2d |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp0 = sext <4 x i32> %a to <4 x i64> |
| ; CODE-LABEL: ssubw2_2d |
| ; CODE: ssubw2 v2.2d, v2.2d, v0.4s |
| ; CODE-NEXT: ssubw v0.2d, v1.2d, v0.2s |
| define <4 x i64> @ssubw2_2d(<4 x i32> %a, <4 x i64> %b) { |
| %tmp0 = sext <4 x i32> %a to <4 x i64> |
| %tmp1 = sub <4 x i64> %b, %tmp0 |
| ret <4 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: neg_wrong_operand_order |
| ; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16> |
| define <8 x i16> @neg_wrong_operand_order(<8 x i8> %a, <8 x i16> %b) { |
| %tmp0 = zext <8 x i8> %a to <8 x i16> |
| %tmp1 = sub <8 x i16> %tmp0, %b |
| ret <8 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: neg_non_widening_op |
| ; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <8 x i8> %a to <8 x i16> |
| define <8 x i16> @neg_non_widening_op(<8 x i8> %a, <8 x i16> %b) { |
| %tmp0 = zext <8 x i8> %a to <8 x i16> |
| %tmp1 = udiv <8 x i16> %b, %tmp0 |
| ret <8 x i16> %tmp1 |
| } |
| |
| ; COST-LABEL: neg_dissimilar_operand_kind_0 |
| ; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = sext <8 x i8> %a to <8 x i16> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <8 x i8> %b to <8 x i16> |
| define <8 x i16> @neg_dissimilar_operand_kind_0(<8 x i8> %a, <8 x i8> %b) { |
| %tmp0 = sext <8 x i8> %a to <8 x i16> |
| %tmp1 = zext <8 x i8> %b to <8 x i16> |
| %tmp2 = add <8 x i16> %tmp0, %tmp1 |
| ret <8 x i16> %tmp2 |
| } |
| |
| ; COST-LABEL: neg_dissimilar_operand_kind_1 |
| ; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <4 x i8> %a to <4 x i32> |
| ; COST-NEXT: Cost Model: Found an estimated cost of 0 for instruction: %tmp1 = zext <4 x i16> %b to <4 x i32> |
| define <4 x i32> @neg_dissimilar_operand_kind_1(<4 x i8> %a, <4 x i16> %b) { |
| %tmp0 = zext <4 x i8> %a to <4 x i32> |
| %tmp1 = zext <4 x i16> %b to <4 x i32> |
| %tmp2 = add <4 x i32> %tmp0, %tmp1 |
| ret <4 x i32> %tmp2 |
| } |
| |
| ; COST-LABEL: neg_illegal_vector_type_0 |
| ; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <16 x i4> %a to <16 x i8> |
| define <16 x i8> @neg_illegal_vector_type_0(<16 x i4> %a, <16 x i8> %b) { |
| %tmp0 = zext <16 x i4> %a to <16 x i8> |
| %tmp1 = sub <16 x i8> %b, %tmp0 |
| ret <16 x i8> %tmp1 |
| } |
| |
| ; COST-LABEL: neg_llegal_vector_type_1 |
| ; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %tmp0 = zext <1 x i16> %a to <1 x i32> |
| define <1 x i32> @neg_llegal_vector_type_1(<1 x i16> %a, <1 x i32> %b) { |
| %tmp0 = zext <1 x i16> %a to <1 x i32> |
| %tmp1 = add <1 x i32> %b, %tmp0 |
| ret <1 x i32> %tmp1 |
| } |
| |
| ; COST-LABEL: neg_llegal_vector_type_2 |
| ; COST-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %tmp0 = zext <4 x i16> %a to <4 x i64> |
| define <4 x i64> @neg_llegal_vector_type_2(<4 x i16> %a, <4 x i64> %b) { |
| %tmp0 = zext <4 x i16> %a to <4 x i64> |
| %tmp1 = add <4 x i64> %b, %tmp0 |
| ret <4 x i64> %tmp1 |
| } |
| |
| ; COST-LABEL: neg_llegal_vector_type_3 |
| ; COST-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %tmp0 = zext <3 x i34> %a to <3 x i68> |
| define <3 x i68> @neg_llegal_vector_type_3(<3 x i34> %a, <3 x i68> %b) { |
| %tmp0 = zext <3 x i34> %a to <3 x i68> |
| %tmp1 = add <3 x i68> %b, %tmp0 |
| ret <3 x i68> %tmp1 |
| } |