1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - | FileCheck %s 3 4--- 5name: merge_i32 6body: | 7 bb.0.entry: 8 liveins: $x10 9 ; CHECK-LABEL: name: merge_i32 10 ; CHECK: liveins: $x10 11 ; CHECK-NEXT: {{ $}} 12 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 13 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s64) = G_ASSERT_ZEXT [[COPY]], 16 14 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16 15 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ASSERT_ZEXT]], [[C]](s64) 16 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ASSERT_ZEXT]], [[SHL]] 17 ; CHECK-NEXT: $x10 = COPY [[OR]](s64) 18 ; CHECK-NEXT: PseudoRET implicit $x10 19 %0:_(s64) = COPY $x10 20 %1:_(s64) = G_ASSERT_ZEXT %0, 16 21 %2:_(s16) = G_TRUNC %1(s64) 22 %3:_(s32) = G_MERGE_VALUES %2(s16), %2(s16) 23 %4:_(s64) = G_ZEXT %3(s32) 24 $x10 = COPY %4(s64) 25 PseudoRET implicit $x10 26... 27--- 28name: merge_i64 29body: | 30 bb.0.entry: 31 liveins: $x10 32 ; CHECK-LABEL: name: merge_i64 33 ; CHECK: liveins: $x10 34 ; CHECK-NEXT: {{ $}} 35 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 36 ; CHECK-NEXT: [[ASSERT_ZEXT:%[0-9]+]]:_(s64) = G_ASSERT_ZEXT [[COPY]], 32 37 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 32 38 ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ASSERT_ZEXT]], [[C]](s64) 39 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ASSERT_ZEXT]], [[SHL]] 40 ; CHECK-NEXT: $x10 = COPY [[OR]](s64) 41 ; CHECK-NEXT: PseudoRET implicit $x10 42 %0:_(s64) = COPY $x10 43 %1:_(s64) = G_ASSERT_ZEXT %0, 32 44 %2:_(s32) = G_TRUNC %1(s64) 45 %3:_(s64) = G_MERGE_VALUES %2(s32), %2(s32) 46 $x10 = COPY %3(s64) 47 PseudoRET implicit $x10 48... 49--- 50name: merge_i128 51body: | 52 bb.0.entry: 53 liveins: $x10 54 ; CHECK-LABEL: name: merge_i128 55 ; CHECK: liveins: $x10 56 ; CHECK-NEXT: {{ $}} 57 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 58 ; CHECK-NEXT: $x10 = COPY [[COPY]](s64) 59 ; CHECK-NEXT: PseudoRET implicit $x10 60 %0:_(s64) = COPY $x10 61 %1:_(s128) = G_MERGE_VALUES %0(s64), %0(s64) 62 %2:_(s64) = G_TRUNC %1(s128) 63 $x10 = COPY %2(s64) 64 PseudoRET implicit $x10 65... 66--- 67name: unmerge_i32 68body: | 69 bb.0.entry: 70 liveins: $x10 71 ; CHECK-LABEL: name: unmerge_i32 72 ; CHECK: liveins: $x10 73 ; CHECK-NEXT: {{ $}} 74 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 75 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4294967295 76 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]] 77 ; CHECK-NEXT: $x10 = COPY [[AND]](s64) 78 ; CHECK-NEXT: PseudoRET implicit $x10 79 %0:_(s64) = COPY $x10 80 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(s64) 81 %3:_(s64) = G_ZEXT %1(s32) 82 $x10 = COPY %3(s64) 83 PseudoRET implicit $x10 84... 85--- 86name: unmerge_i64 87body: | 88 bb.0.entry: 89 liveins: $x10 90 ; CHECK-LABEL: name: unmerge_i64 91 ; CHECK: liveins: $x10 92 ; CHECK-NEXT: {{ $}} 93 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 94 ; CHECK-NEXT: $x10 = COPY [[COPY]](s64) 95 ; CHECK-NEXT: PseudoRET implicit $x10 96 %0:_(s64) = COPY $x10 97 %1:_(s128) = G_ZEXT %0(s64) 98 %2:_(s64), %3:_(s64) = G_UNMERGE_VALUES %1(s128) 99 $x10 = COPY %2(s64) 100 PseudoRET implicit $x10 101... 102--- 103name: unmerge_i128 104body: | 105 bb.0.entry: 106 liveins: $x10 107 ; CHECK-LABEL: name: unmerge_i128 108 ; CHECK: liveins: $x10 109 ; CHECK-NEXT: {{ $}} 110 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x10 111 ; CHECK-NEXT: $x10 = COPY [[COPY]](s64) 112 ; CHECK-NEXT: PseudoRET implicit $x10 113 %0:_(s64) = COPY $x10 114 %1:_(s256) = G_ZEXT %0(s64) 115 %2:_(s128), %3:_(s128) = G_UNMERGE_VALUES %1(s256) 116 %4:_(s64) = G_TRUNC %2(s128) 117 $x10 = COPY %4(s64) 118 PseudoRET implicit $x10 119... 120