1ecfdc23dSMirko Brkušanin# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2*9e9907f1SFangrui Song# RUN: llc -mtriple=amdgcn -mcpu=gfx1150 -verify-machineinstrs -run-pass=si-fold-operands %s -o - | FileCheck %s 3ecfdc23dSMirko Brkušanin 4ecfdc23dSMirko Brkušanin--- 5ecfdc23dSMirko Brkušaninname: fmac_fold_inlinable_src0_to_fmamk 6ecfdc23dSMirko BrkušanintracksRegLiveness: true 7ecfdc23dSMirko Brkušaninbody: | 8ecfdc23dSMirko Brkušanin bb.0: 9ecfdc23dSMirko Brkušanin liveins: $sgpr0, $sgpr1 10ecfdc23dSMirko Brkušanin 11ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_inlinable_src0_to_fmamk 12ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0, $sgpr1 13ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 14ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 15ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 16ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1056964608, [[COPY1]], implicit $mode 17ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 18ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 19ecfdc23dSMirko Brkušanin %1:sreg_32 = COPY $sgpr1 20ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 21ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %inlinable, %0, %1, implicit $mode 22ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 23ecfdc23dSMirko Brkušanin... 24ecfdc23dSMirko Brkušanin--- 25ecfdc23dSMirko Brkušaninname: fmac_fold_inlinable_src1_to_fmamk 26ecfdc23dSMirko BrkušanintracksRegLiveness: true 27ecfdc23dSMirko Brkušaninbody: | 28ecfdc23dSMirko Brkušanin bb.0: 29ecfdc23dSMirko Brkušanin liveins: $sgpr0, $sgpr1 30ecfdc23dSMirko Brkušanin 31ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_inlinable_src1_to_fmamk 32ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0, $sgpr1 33ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 34ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 35ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 36ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1056964608, [[COPY1]], implicit $mode 37ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 38ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 39ecfdc23dSMirko Brkušanin %1:sreg_32 = COPY $sgpr1 40ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 41ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %inlinable, %1, implicit $mode 42ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 43ecfdc23dSMirko Brkušanin... 44ecfdc23dSMirko Brkušanin--- 45ecfdc23dSMirko Brkušaninname: fmac_fold_inlinable_src2_to_fmaak 46ecfdc23dSMirko BrkušanintracksRegLiveness: true 47ecfdc23dSMirko Brkušaninbody: | 48ecfdc23dSMirko Brkušanin bb.0: 49ecfdc23dSMirko Brkušanin liveins: $sgpr0, $sgpr1 50ecfdc23dSMirko Brkušanin 51ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_inlinable_src2_to_fmaak 52ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0, $sgpr1 53ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 54ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 55ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 56ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], [[COPY1]], 1056964608, implicit $mode 57ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 58ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 59ecfdc23dSMirko Brkušanin %1:sreg_32 = COPY $sgpr1 60ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 61ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %1, %inlinable, implicit $mode 62ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 63ecfdc23dSMirko Brkušanin... 64ecfdc23dSMirko Brkušanin--- 65ecfdc23dSMirko Brkušaninname: fmac_fold_noninlinable_src0_to_fmamk 66ecfdc23dSMirko BrkušanintracksRegLiveness: true 67ecfdc23dSMirko Brkušaninbody: | 68ecfdc23dSMirko Brkušanin bb.0: 69ecfdc23dSMirko Brkušanin liveins: $sgpr0, $sgpr1 70ecfdc23dSMirko Brkušanin 71ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_noninlinable_src0_to_fmamk 72ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0, $sgpr1 73ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 74ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 75ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 76ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, [[COPY1]], implicit $mode 77ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 78ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 79ecfdc23dSMirko Brkušanin %1:sreg_32 = COPY $sgpr1 80ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 81ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %noninlinable, %0, %1, implicit $mode 82ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 83ecfdc23dSMirko Brkušanin... 84ecfdc23dSMirko Brkušanin--- 85ecfdc23dSMirko Brkušaninname: fmac_fold_noninlinable_src1_to_fmamk 86ecfdc23dSMirko BrkušanintracksRegLiveness: true 87ecfdc23dSMirko Brkušaninbody: | 88ecfdc23dSMirko Brkušanin bb.0: 89ecfdc23dSMirko Brkušanin liveins: $sgpr0, $sgpr1 90ecfdc23dSMirko Brkušanin 91ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_noninlinable_src1_to_fmamk 92ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0, $sgpr1 93ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 94ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 95ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 96ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, [[COPY1]], implicit $mode 97ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 98ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 99ecfdc23dSMirko Brkušanin %1:sreg_32 = COPY $sgpr1 100ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 101ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %noninlinable, %1, implicit $mode 102ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 103ecfdc23dSMirko Brkušanin... 104ecfdc23dSMirko Brkušanin--- 105ecfdc23dSMirko Brkušaninname: fmac_fold_noninlinable_src2_to_fmaak 106ecfdc23dSMirko BrkušanintracksRegLiveness: true 107ecfdc23dSMirko Brkušaninbody: | 108ecfdc23dSMirko Brkušanin bb.0: 109ecfdc23dSMirko Brkušanin liveins: $sgpr0, $sgpr1 110ecfdc23dSMirko Brkušanin 111ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_noninlinable_src2_to_fmaak 112ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0, $sgpr1 113ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 114ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 115ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 116ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], [[COPY1]], 1234567890, implicit $mode 117ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 118ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 119ecfdc23dSMirko Brkušanin %1:sreg_32 = COPY $sgpr1 120ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 121ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %1, %noninlinable, implicit $mode 122ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 123ecfdc23dSMirko Brkušanin... 124ecfdc23dSMirko Brkušanin 125ecfdc23dSMirko Brkušanin--- 126ecfdc23dSMirko Brkušaninname: fmac_fold_inlinable_src2_to_fmaak_noninlinable_src0_to_fmamk 127ecfdc23dSMirko BrkušanintracksRegLiveness: true 128ecfdc23dSMirko Brkušaninbody: | 129ecfdc23dSMirko Brkušanin bb.0: 130ecfdc23dSMirko Brkušanin liveins: $sgpr0 131ecfdc23dSMirko Brkušanin 132ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_inlinable_src2_to_fmaak_noninlinable_src0_to_fmamk 133ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0 134ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 135ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 136ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, 1056964608, implicit $mode 137ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 138ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 139ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 140ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 141ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %noninlinable, %0, %inlinable, implicit $mode 142ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 143ecfdc23dSMirko Brkušanin... 144ecfdc23dSMirko Brkušanin--- 145ecfdc23dSMirko Brkušaninname: fmac_fold_inlinable_src2_to_fmaak_noninlinable_src1_to_fmamk 146ecfdc23dSMirko BrkušanintracksRegLiveness: true 147ecfdc23dSMirko Brkušaninbody: | 148ecfdc23dSMirko Brkušanin bb.0: 149ecfdc23dSMirko Brkušanin liveins: $sgpr0 150ecfdc23dSMirko Brkušanin 151ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_inlinable_src2_to_fmaak_noninlinable_src1_to_fmamk 152ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0 153ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 154ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 155ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 [[COPY]], 1234567890, 1056964608, implicit $mode 156ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 157ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 158ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 159ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 160ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %noninlinable, %inlinable, implicit $mode 161ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 162ecfdc23dSMirko Brkušanin... 163ecfdc23dSMirko Brkušanin--- 164ecfdc23dSMirko Brkušaninname: fmac_fold_noninlinable_src2_to_fmaak_inlinable_src1 165ecfdc23dSMirko BrkušanintracksRegLiveness: true 166ecfdc23dSMirko Brkušaninbody: | 167ecfdc23dSMirko Brkušanin bb.0: 168ecfdc23dSMirko Brkušanin liveins: $sgpr0 169ecfdc23dSMirko Brkušanin 170ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_noninlinable_src2_to_fmaak_inlinable_src1 171ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0 172ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 173ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 174ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], 1056964608, 1234567890, implicit $mode 175ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 176ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 177ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 178ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 179ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %inlinable, %noninlinable, implicit $mode 180ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 181ecfdc23dSMirko Brkušanin... 182ecfdc23dSMirko Brkušanin--- 183ecfdc23dSMirko Brkušaninname: fmac_fold_noninlinable_src2_to_fmaak_dont_fold_other_noninlinable 184ecfdc23dSMirko BrkušanintracksRegLiveness: true 185ecfdc23dSMirko Brkušaninbody: | 186ecfdc23dSMirko Brkušanin bb.0: 187ecfdc23dSMirko Brkušanin liveins: $sgpr0 188ecfdc23dSMirko Brkušanin 189ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_noninlinable_src2_to_fmaak_dont_fold_other_noninlinable 190ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0 191ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 192ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 193ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %noninlinable2:sreg_32 = S_MOV_B32 1234567891 194ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], %noninlinable2, 1234567890, implicit $mode 195ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 196ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 197ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 198ecfdc23dSMirko Brkušanin %noninlinable2:sreg_32 = S_MOV_B32 1234567891 199ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %noninlinable2, %noninlinable, implicit $mode 200ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 201ecfdc23dSMirko Brkušanin... 202ecfdc23dSMirko Brkušanin--- 203ecfdc23dSMirko Brkušaninname: fmac_fold_inlinable_src1_to_fmamk_noninlinable_src2_to_fmaak 204ecfdc23dSMirko BrkušanintracksRegLiveness: true 205ecfdc23dSMirko Brkušaninbody: | 206ecfdc23dSMirko Brkušanin bb.0: 207ecfdc23dSMirko Brkušanin liveins: $sgpr0 208ecfdc23dSMirko Brkušanin 209ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_inlinable_src1_to_fmamk_noninlinable_src2_to_fmaak 210ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0 211ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 212ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 213ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAAK_F32 [[COPY]], 1056964608, 1234567890, implicit $mode 214ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 215ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 216ecfdc23dSMirko Brkušanin %inlinable:sreg_32 = S_MOV_B32 1056964608 217ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 218ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %0, %inlinable, %noninlinable, implicit $mode 219ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 220ecfdc23dSMirko Brkušanin... 221ecfdc23dSMirko Brkušanin--- 222ecfdc23dSMirko Brkušaninname: fmac_fold_same_noninlinable_src0_and_src1_to_fmamk 223ecfdc23dSMirko BrkušanintracksRegLiveness: true 224ecfdc23dSMirko Brkušaninbody: | 225ecfdc23dSMirko Brkušanin bb.0: 226ecfdc23dSMirko Brkušanin liveins: $sgpr0 227ecfdc23dSMirko Brkušanin 228ecfdc23dSMirko Brkušanin ; CHECK-LABEL: name: fmac_fold_same_noninlinable_src0_and_src1_to_fmamk 229ecfdc23dSMirko Brkušanin ; CHECK: liveins: $sgpr0 230ecfdc23dSMirko Brkušanin ; CHECK-NEXT: {{ $}} 231ecfdc23dSMirko Brkušanin ; CHECK-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 232ecfdc23dSMirko Brkušanin ; CHECK-NEXT: %fma:sreg_32 = nofpexcept S_FMAMK_F32 1234567890, 1234567890, [[COPY]], implicit $mode 233ecfdc23dSMirko Brkušanin ; CHECK-NEXT: $sgpr0 = COPY %fma 234ecfdc23dSMirko Brkušanin %0:sreg_32 = COPY $sgpr0 235ecfdc23dSMirko Brkušanin %noninlinable:sreg_32 = S_MOV_B32 1234567890 236ecfdc23dSMirko Brkušanin %fma:sreg_32 = nofpexcept S_FMAC_F32 %noninlinable, %noninlinable, %0, implicit $mode 237ecfdc23dSMirko Brkušanin $sgpr0 = COPY %fma 238ecfdc23dSMirko Brkušanin... 239