1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 2 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 4# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s 5 6--- 7name: constant_fold_ashr_s32_s32 8legalized: true 9tracksRegLiveness: true 10body: | 11 bb.0: 12 ; CHECK-LABEL: name: constant_fold_ashr_s32_s32 13 ; CHECK: %shift:_(s32) = G_CONSTANT i32 -482254 14 ; CHECK-NEXT: $vgpr0 = COPY %shift(s32) 15 %val:_(s32) = G_CONSTANT i32 -123456789 16 %shift_amt:_(s32) = G_CONSTANT i32 8 17 %shift:_(s32) = G_ASHR %val, %shift_amt 18 $vgpr0 = COPY %shift 19 20... 21 22--- 23name: constant_fold_ashr_s16_s16 24legalized: true 25tracksRegLiveness: true 26body: | 27 bb.0: 28 ; CHECK-LABEL: name: constant_fold_ashr_s16_s16 29 ; CHECK: %ext:_(s32) = G_CONSTANT i32 64764 30 ; CHECK-NEXT: $vgpr0 = COPY %ext(s32) 31 %val:_(s16) = G_CONSTANT i16 -12345 32 %shift_amt:_(s16) = G_CONSTANT i16 4 33 %shift:_(s16) = G_ASHR %val, %shift_amt 34 %ext:_(s32) = G_ANYEXT %shift 35 $vgpr0 = COPY %ext 36 37... 38 39--- 40name: constant_fold_ashr_s64_s32 41legalized: true 42tracksRegLiveness: true 43body: | 44 bb.0: 45 ; CHECK-LABEL: name: constant_fold_ashr_s64_s32 46 ; CHECK: %shift:_(s64) = G_CONSTANT i64 -482254 47 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY %shift(s64) 48 %val:_(s64) = G_CONSTANT i64 -123456789 49 %shift_amt:_(s32) = G_CONSTANT i32 8 50 %shift:_(s64) = G_ASHR %val, %shift_amt 51 $vgpr0_vgpr1 = COPY %shift 52 53... 54 55--- 56name: constant_fold_ashr_v2s16_v2s16 57legalized: true 58tracksRegLiveness: true 59body: | 60 bb.0: 61 ; CHECK-LABEL: name: constant_fold_ashr_v2s16_v2s16 62 ; CHECK: %val0:_(s16) = G_CONSTANT i16 1234 63 ; CHECK-NEXT: %val1:_(s16) = G_CONSTANT i16 -5678 64 ; CHECK-NEXT: %val:_(<2 x s16>) = G_BUILD_VECTOR %val0(s16), %val1(s16) 65 ; CHECK-NEXT: %shift_amt_elt:_(s16) = G_CONSTANT i16 8 66 ; CHECK-NEXT: %shift_amt:_(<2 x s16>) = G_BUILD_VECTOR %shift_amt_elt(s16), %shift_amt_elt(s16) 67 ; CHECK-NEXT: %shift:_(<2 x s16>) = G_ASHR %val, %shift_amt(<2 x s16>) 68 ; CHECK-NEXT: $vgpr0 = COPY %shift(<2 x s16>) 69 %val0:_(s16) = G_CONSTANT i16 1234 70 %val1:_(s16) = G_CONSTANT i16 -5678 71 %val:_(<2 x s16>) = G_BUILD_VECTOR %val0, %val1 72 %shift_amt_elt:_(s16) = G_CONSTANT i16 8 73 %shift_amt:_(<2 x s16>) = G_BUILD_VECTOR %shift_amt_elt, %shift_amt_elt 74 %shift:_(<2 x s16>) = G_ASHR %val, %shift_amt 75 $vgpr0 = COPY %shift 76 77... 78 79--- 80name: constant_fold_ashr_v2s16_v2s16_undef_amt_elt 81legalized: true 82tracksRegLiveness: true 83body: | 84 bb.0: 85 ; CHECK-LABEL: name: constant_fold_ashr_v2s16_v2s16_undef_amt_elt 86 ; CHECK: %val0:_(s16) = G_CONSTANT i16 1234 87 ; CHECK-NEXT: %val1:_(s16) = G_CONSTANT i16 -5678 88 ; CHECK-NEXT: %val:_(<2 x s16>) = G_BUILD_VECTOR %val0(s16), %val1(s16) 89 ; CHECK-NEXT: %shift_amt_elt:_(s16) = G_CONSTANT i16 8 90 ; CHECK-NEXT: %undef:_(s16) = G_IMPLICIT_DEF 91 ; CHECK-NEXT: %shift_amt:_(<2 x s16>) = G_BUILD_VECTOR %shift_amt_elt(s16), %undef(s16) 92 ; CHECK-NEXT: %shift:_(<2 x s16>) = G_ASHR %val, %shift_amt(<2 x s16>) 93 ; CHECK-NEXT: $vgpr0 = COPY %shift(<2 x s16>) 94 %val0:_(s16) = G_CONSTANT i16 1234 95 %val1:_(s16) = G_CONSTANT i16 -5678 96 %val:_(<2 x s16>) = G_BUILD_VECTOR %val0, %val1 97 %shift_amt_elt:_(s16) = G_CONSTANT i16 8 98 %undef:_(s16) = G_IMPLICIT_DEF 99 %shift_amt:_(<2 x s16>) = G_BUILD_VECTOR %shift_amt_elt, %undef 100 %shift:_(<2 x s16>) = G_ASHR %val, %shift_amt 101 $vgpr0 = COPY %shift 102 103... 104 105--- 106name: constant_fold_ashr_v2s16_v2s16_undef_val_elt 107legalized: true 108tracksRegLiveness: true 109body: | 110 bb.0: 111 ; CHECK-LABEL: name: constant_fold_ashr_v2s16_v2s16_undef_val_elt 112 ; CHECK: %val0:_(s16) = G_CONSTANT i16 -1234 113 ; CHECK-NEXT: %undef:_(s16) = G_IMPLICIT_DEF 114 ; CHECK-NEXT: %val:_(<2 x s16>) = G_BUILD_VECTOR %val0(s16), %undef(s16) 115 ; CHECK-NEXT: %shift_amt_elt:_(s16) = G_CONSTANT i16 8 116 ; CHECK-NEXT: %shift_amt:_(<2 x s16>) = G_BUILD_VECTOR %shift_amt_elt(s16), %shift_amt_elt(s16) 117 ; CHECK-NEXT: %shift:_(<2 x s16>) = G_ASHR %val, %shift_amt(<2 x s16>) 118 ; CHECK-NEXT: $vgpr0 = COPY %shift(<2 x s16>) 119 %val0:_(s16) = G_CONSTANT i16 -1234 120 %undef:_(s16) = G_IMPLICIT_DEF 121 %val:_(<2 x s16>) = G_BUILD_VECTOR %val0, %undef 122 %shift_amt_elt:_(s16) = G_CONSTANT i16 8 123 %shift_amt:_(<2 x s16>) = G_BUILD_VECTOR %shift_amt_elt, %shift_amt_elt 124 %shift:_(<2 x s16>) = G_ASHR %val, %shift_amt 125 $vgpr0 = COPY %shift 126 127... 128