137 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - -mtriple=aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s --check-prefixes=CHECK3 4---5name: test_combine_trunc_xor_i646body: |7 bb.1:8 ; CHECK-LABEL: name: test_combine_trunc_xor_i649 ; CHECK: %lhs:_(s64) = COPY $x010 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %lhs(s64)11 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 512 ; CHECK-NEXT: %small:_(s32) = G_XOR [[TRUNC]], [[C]]13 ; CHECK-NEXT: $w0 = COPY %small(s32)14 %lhs:_(s64) = COPY $x015 %rhs:_(s64) = G_CONSTANT i64 516 %res:_(s64) = G_XOR %lhs, %rhs17 %small:_(s32) = G_TRUNC %res(s64)18 $w0 = COPY %small(s32)19...20---21name: test_combine_trunc_add_i6422body: |23 bb.1:24 ; CHECK-LABEL: name: test_combine_trunc_add_i6425 ; CHECK: %lhs:_(s64) = COPY $x026 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %lhs(s64)27 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 528 ; CHECK-NEXT: %small:_(s32) = G_ADD [[TRUNC]], [[C]]29 ; CHECK-NEXT: $w0 = COPY %small(s32)30 %lhs:_(s64) = COPY $x031 %rhs:_(s64) = G_CONSTANT i64 532 %res:_(s64) = G_ADD %lhs, %rhs33 %small:_(s32) = G_TRUNC %res(s64)34 $w0 = COPY %small(s32)35...36---37name: test_combine_trunc_mul_i6438body: |39 bb.1:40 ; CHECK-LABEL: name: test_combine_trunc_mul_i6441 ; CHECK: %lhs:_(s64) = COPY $x042 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %lhs(s64)43 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 544 ; CHECK-NEXT: %small:_(s32) = G_MUL [[TRUNC]], [[C]]45 ; CHECK-NEXT: $w0 = COPY %small(s32)46 %lhs:_(s64) = COPY $x047 %rhs:_(s64) = G_CONSTANT i64 548 %res:_(s64) = G_MUL %lhs, %rhs49 %small:_(s32) = G_TRUNC %res(s64)50 $w0 = COPY %small(s32)51...52---53name: test_combine_trunc_and_i6454body: |55 bb.1:56 ; CHECK-LABEL: name: test_combine_trunc_and_i6457 ; CHECK: %lhs:_(s64) = COPY $x058 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %lhs(s64)59 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 560 ; CHECK-NEXT: %small:_(s32) = G_AND [[TRUNC]], [[C]]61 ; CHECK-NEXT: $w0 = COPY %small(s32)62 %lhs:_(s64) = COPY $x063 %rhs:_(s64) = G_CONSTANT i64 564 %res:_(s64) = G_AND %lhs, %rhs65 %small:_(s32) = G_TRUNC %res(s64)66 $w0 = COPY %small(s32)67...68---69name: test_combine_trunc_or_i6470body: |71 bb.1:72 ; CHECK-LABEL: name: test_combine_trunc_or_i6473 ; CHECK: %lhs:_(s64) = COPY $x074 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %lhs(s64)75 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 576 ; CHECK-NEXT: %small:_(s32) = G_OR [[TRUNC]], [[C]]77 ; CHECK-NEXT: $w0 = COPY %small(s32)78 %lhs:_(s64) = COPY $x079 %rhs:_(s64) = G_CONSTANT i64 580 %res:_(s64) = G_OR %lhs, %rhs81 %small:_(s32) = G_TRUNC %res(s64)82 $w0 = COPY %small(s32)83...84---85name: test_combine_trunc_sub_i12886body: |87 bb.1:88 ; CHECK-LABEL: name: test_combine_trunc_sub_i12889 ; CHECK: %lhs:_(s128) = COPY $q090 ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC %lhs(s128)91 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -592 ; CHECK-NEXT: %small:_(s32) = G_ADD [[TRUNC]], [[C]]93 ; CHECK-NEXT: $w0 = COPY %small(s32)94 %lhs:_(s128) = COPY $q095 %rhs:_(s128) = G_CONSTANT i128 596 %res:_(s128) = G_SUB %lhs, %rhs97 %small:_(s32) = G_TRUNC %res(s128)98 $w0 = COPY %small(s32)99...100---101name: test_combine_trunc_sub_i128_multi_use102body: |103 bb.1:104 ; CHECK-LABEL: name: test_combine_trunc_sub_i128_multi_use105 ; CHECK: %lhs:_(s128) = COPY $q0106 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s128) = G_CONSTANT i128 -5107 ; CHECK-NEXT: %res:_(s128) = G_ADD %lhs, [[C]]108 ; CHECK-NEXT: %small:_(s32) = G_TRUNC %res(s128)109 ; CHECK-NEXT: $q0 = COPY %res(s128)110 ; CHECK-NEXT: $w0 = COPY %small(s32)111 %lhs:_(s128) = COPY $q0112 %rhs:_(s128) = G_CONSTANT i128 5113 %res:_(s128) = G_SUB %lhs, %rhs114 %small:_(s32) = G_TRUNC %res(s128)115 $q0 = COPY %res(s128)116 $w0 = COPY %small(s32)117...118---119name: test_combine_trunc_xor_vector_pattern_did_not_match120body: |121 bb.1:122 ; CHECK-LABEL: name: test_combine_trunc_xor_vector_pattern_did_not_match123 ; CHECK: %arg1:_(s64) = COPY $x0124 ; CHECK-NEXT: %arg2:_(s64) = COPY $x0125 ; CHECK-NEXT: %lhs:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)126 ; CHECK-NEXT: %rhs:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)127 ; CHECK-NEXT: %res:_(<2 x s64>) = G_XOR %lhs, %rhs128 ; CHECK-NEXT: %small:_(<2 x s16>) = G_TRUNC %res(<2 x s64>)129 ; CHECK-NEXT: $w0 = COPY %small(<2 x s16>)130 %arg1:_(s64) = COPY $x0131 %arg2:_(s64) = COPY $x0132 %lhs:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)133 %rhs:_(<2 x s64>) = G_BUILD_VECTOR %arg1(s64), %arg2(s64)134 %res:_(<2 x s64>) = G_XOR %lhs, %rhs135 %small:_(<2 x s16>) = G_TRUNC %res(<2 x s64>)136 $w0 = COPY %small(<2 x s16>)137