Skip to content

Commit 9d491bc

Browse files
committed
[AArch64][GlobalISel] Enable extract_vec_elt_combines postlegalization.
1 parent bec85f3 commit 9d491bc

File tree

2 files changed

+18
-35
lines changed

2 files changed

+18
-35
lines changed

llvm/lib/Target/AArch64/AArch64Combine.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ def AArch64PostLegalizerCombiner
361361
ptr_add_immed_chain, overlapping_and,
362362
split_store_zero_128, undef_combines,
363363
select_to_minmax, or_to_bsp, combine_concat_vector,
364-
commute_constant_to_rhs,
364+
commute_constant_to_rhs, extract_vec_elt_combines,
365365
push_freeze_to_prevent_poison_from_propagating,
366366
combine_mul_cmlt, combine_use_vector_truncate, extmultomull]> {
367367
}

llvm/test/CodeGen/AArch64/vec-combine-compare-to-bitmask.ll

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -596,23 +596,15 @@ define i4 @convert_to_bitmask_4xi8(<4 x i8> %vec) {
596596
; CHECK-GI-NEXT: mov.b v1[3], w8
597597
; CHECK-GI-NEXT: cmeq.8b v0, v0, v1
598598
; CHECK-GI-NEXT: mvn.8b v0, v0
599-
; CHECK-GI-NEXT: umov.b w8, v0[0]
600-
; CHECK-GI-NEXT: umov.b w9, v0[1]
601-
; CHECK-GI-NEXT: fmov s1, w8
602-
; CHECK-GI-NEXT: umov.b w8, v0[2]
603-
; CHECK-GI-NEXT: mov.s v1[1], w9
604-
; CHECK-GI-NEXT: umov.b w9, v0[3]
605-
; CHECK-GI-NEXT: mov.s v1[2], w8
606-
; CHECK-GI-NEXT: mov.s v1[3], w9
607-
; CHECK-GI-NEXT: mov.s w8, v1[1]
608-
; CHECK-GI-NEXT: mov.s w9, v1[2]
609-
; CHECK-GI-NEXT: fmov w11, s1
610-
; CHECK-GI-NEXT: mov.s w10, v1[3]
599+
; CHECK-GI-NEXT: umov.b w8, v0[1]
600+
; CHECK-GI-NEXT: umov.b w9, v0[0]
601+
; CHECK-GI-NEXT: umov.b w10, v0[2]
602+
; CHECK-GI-NEXT: umov.b w11, v0[3]
611603
; CHECK-GI-NEXT: and w8, w8, #0x1
612-
; CHECK-GI-NEXT: bfi w11, w8, #1, #31
613-
; CHECK-GI-NEXT: and w8, w9, #0x1
614-
; CHECK-GI-NEXT: and w9, w10, #0x1
615-
; CHECK-GI-NEXT: orr w8, w11, w8, lsl #2
604+
; CHECK-GI-NEXT: bfi w9, w8, #1, #31
605+
; CHECK-GI-NEXT: and w8, w10, #0x1
606+
; CHECK-GI-NEXT: orr w8, w9, w8, lsl #2
607+
; CHECK-GI-NEXT: and w9, w11, #0x1
616608
; CHECK-GI-NEXT: orr w8, w8, w9, lsl #3
617609
; CHECK-GI-NEXT: strb w8, [sp, #15]
618610
; CHECK-GI-NEXT: and w0, w8, #0xff
@@ -871,28 +863,19 @@ define i6 @no_combine_illegal_num_elements(<6 x i32> %vec) {
871863
; CHECK-GI-NEXT: cmtst.4s v1, v1, v1
872864
; CHECK-GI-NEXT: mov.s w8, v1[1]
873865
; CHECK-GI-NEXT: mov.s w9, v1[2]
866+
; CHECK-GI-NEXT: fmov w11, s1
874867
; CHECK-GI-NEXT: mov.s w10, v1[3]
875-
; CHECK-GI-NEXT: mov.h v1[1], w8
876-
; CHECK-GI-NEXT: mov.s w8, v0[1]
877-
; CHECK-GI-NEXT: mov.h v1[2], w9
878-
; CHECK-GI-NEXT: mov.h v1[3], w10
879-
; CHECK-GI-NEXT: mov.h v1[4], v0[0]
880-
; CHECK-GI-NEXT: mov.h v1[5], w8
881-
; CHECK-GI-NEXT: umov.h w8, v1[1]
882-
; CHECK-GI-NEXT: umov.h w9, v1[0]
883-
; CHECK-GI-NEXT: umov.h w10, v1[2]
884-
; CHECK-GI-NEXT: umov.h w11, v1[3]
885868
; CHECK-GI-NEXT: and w8, w8, #0x1
886-
; CHECK-GI-NEXT: bfi w9, w8, #1, #31
887-
; CHECK-GI-NEXT: and w8, w10, #0x1
888-
; CHECK-GI-NEXT: umov.h w10, v1[4]
889-
; CHECK-GI-NEXT: orr w8, w9, w8, lsl #2
890-
; CHECK-GI-NEXT: and w9, w11, #0x1
891-
; CHECK-GI-NEXT: umov.h w11, v1[5]
892-
; CHECK-GI-NEXT: orr w8, w8, w9, lsl #3
869+
; CHECK-GI-NEXT: bfi w11, w8, #1, #31
870+
; CHECK-GI-NEXT: and w8, w9, #0x1
893871
; CHECK-GI-NEXT: and w9, w10, #0x1
872+
; CHECK-GI-NEXT: mov.s w10, v0[1]
873+
; CHECK-GI-NEXT: orr w8, w11, w8, lsl #2
874+
; CHECK-GI-NEXT: orr w8, w8, w9, lsl #3
875+
; CHECK-GI-NEXT: fmov w9, s0
876+
; CHECK-GI-NEXT: and w9, w9, #0x1
894877
; CHECK-GI-NEXT: orr w8, w8, w9, lsl #4
895-
; CHECK-GI-NEXT: and w9, w11, #0x1
878+
; CHECK-GI-NEXT: and w9, w10, #0x1
896879
; CHECK-GI-NEXT: orr w8, w8, w9, lsl #5
897880
; CHECK-GI-NEXT: and w8, w8, #0x3f
898881
; CHECK-GI-NEXT: strb w8, [sp, #15]

0 commit comments

Comments
 (0)