brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.7 KiB · a9ca2cd Raw
700 lines · plain
1# RUN: llc --mtriple=amdgcn--amdhsa -mcpu=fiji -verify-machineinstrs -run-pass si-fold-operands,si-shrink-instructions %s -o - | FileCheck %s2# RUN: llc --mtriple=amdgcn--amdhsa -mcpu=fiji -verify-machineinstrs -passes si-fold-operands,si-shrink-instructions %s -o - | FileCheck %s3--- |4  define amdgpu_kernel void @add_f32_1.0_one_f16_use() #0 {5    %f16.val0 = load volatile half, ptr addrspace(1) poison6    %f16.val1 = load volatile half, ptr addrspace(1) poison7    %f32.val = load volatile float, ptr addrspace(1) poison8    %f16.add0 = fadd half %f16.val0, 0xH3C009    %f32.add = fadd float %f32.val, 1.000000e+0010    store volatile half %f16.add0, ptr addrspace(1) poison11    store volatile float %f32.add, ptr addrspace(1) poison12    ret void13  }14 15  define amdgpu_kernel void @add_f32_1.0_multi_f16_use() #0 {16    %f16.val0 = load volatile half, ptr addrspace(1) poison17    %f16.val1 = load volatile half, ptr addrspace(1) poison18    %f32.val = load volatile float, ptr addrspace(1) poison19    %f16.add0 = fadd half %f16.val0, 0xH3C0020    %f32.add = fadd float %f32.val, 1.000000e+0021    store volatile half %f16.add0, ptr addrspace(1) poison22    store volatile float %f32.add, ptr addrspace(1) poison23    ret void24  }25 26  define amdgpu_kernel void @add_f32_1.0_one_f32_use_one_f16_use () #0 {27    %f16.val0 = load volatile half, ptr addrspace(1) poison28    %f16.val1 = load volatile half, ptr addrspace(1) poison29    %f32.val = load volatile float, ptr addrspace(1) poison30    %f16.add0 = fadd half %f16.val0, 0xH3C0031    %f32.add = fadd float %f32.val, 1.000000e+0032    store volatile half %f16.add0, ptr addrspace(1) poison33    store volatile float %f32.add, ptr addrspace(1) poison34    ret void35  }36 37  define amdgpu_kernel void @add_f32_1.0_one_f32_use_multi_f16_use () #0 {38    %f16.val0 = load volatile half, ptr addrspace(1) poison39    %f16.val1 = load volatile half, ptr addrspace(1) poison40    %f32.val = load volatile float, ptr addrspace(1) poison41    %f16.add0 = fadd half %f16.val0, 0xH3C0042    %f16.add1 = fadd half %f16.val1, 0xH3C0043    %f32.add = fadd float %f32.val, 1.000000e+0044    store volatile half %f16.add0, ptr addrspace(1) poison45    store volatile half %f16.add1, ptr addrspace(1) poison46    store volatile float %f32.add, ptr addrspace(1) poison47    ret void48  }49 50  define amdgpu_kernel void @add_i32_1_multi_f16_use() #0 {51    %f16.val0 = load volatile half, ptr addrspace(1) poison52    %f16.val1 = load volatile half, ptr addrspace(1) poison53    %f16.add0 = fadd half %f16.val0, 0xH000154    %f16.add1 = fadd half %f16.val1, 0xH000155    store volatile half %f16.add0, ptr addrspace(1) poison56    store volatile half %f16.add1,ptr addrspace(1) poison57    ret void58  }59 60  define amdgpu_kernel void @add_i32_m2_one_f32_use_multi_f16_use () #0 {61    %f16.val0 = load volatile half, ptr addrspace(1) poison62    %f16.val1 = load volatile half, ptr addrspace(1) poison63    %f32.val = load volatile float, ptr addrspace(1) poison64    %f16.add0 = fadd half %f16.val0, 0xHFFFE65    %f16.add1 = fadd half %f16.val1, 0xHFFFE66    %f32.add = fadd float %f32.val, 0xffffffffc000000067    store volatile half %f16.add0, ptr addrspace(1) poison68    store volatile half %f16.add1, ptr addrspace(1) poison69    store volatile float %f32.add, ptr addrspace(1) poison70    ret void71  }72 73  define amdgpu_kernel void @add_f16_1.0_multi_f32_use() #0 {74    %f32.val0 = load volatile float, ptr addrspace(1) poison75    %f32.val1 = load volatile float, ptr addrspace(1) poison76    %f32.val = load volatile float, ptr addrspace(1) poison77    %f32.add0 = fadd float %f32.val0, 1.078    %f32.add1 = fadd float %f32.val1, 1.079    store volatile float %f32.add0, ptr addrspace(1) poison80    store volatile float %f32.add1, ptr addrspace(1) poison81    ret void82  }83 84  define amdgpu_kernel void @add_f16_1.0_other_high_bits_multi_f16_use() #0 {85    %f16.val0 = load volatile half, ptr addrspace(1) poison86    %f16.val1 = load volatile half, ptr addrspace(1) poison87    %f32.val = load volatile half, ptr addrspace(1) poison88    %f16.add0 = fadd half %f16.val0, 0xH3C0089    %f32.add = fadd half %f32.val, 1.000000e+0090    store volatile half %f16.add0, ptr addrspace(1) poison91    store volatile half %f32.add, ptr addrspace(1) poison92    ret void93  }94 95  define amdgpu_kernel void @add_f16_1.0_other_high_bits_use_f16_f32() #0 {96    %f16.val0 = load volatile half, ptr addrspace(1) poison97    %f16.val1 = load volatile half, ptr addrspace(1) poison98    %f32.val = load volatile half, ptr addrspace(1) poison99    %f16.add0 = fadd half %f16.val0, 0xH3C00100    %f32.add = fadd half %f32.val, 1.000000e+00101    store volatile half %f16.add0, ptr addrspace(1) poison102    store volatile half %f32.add, ptr addrspace(1) poison103    ret void104  }105 106  attributes #0 = { nounwind }107 108...109---110 111# f32 1.0 with a single use should be folded as the low 32-bits of a112#  literal constant.113 114# CHECK-LABEL: name: add_f32_1.0_one_f16_use115# CHECK: %13:vgpr_32 = V_ADD_F16_e32  1065353216, killed %11, implicit $mode, implicit $exec116 117name:            add_f32_1.0_one_f16_use118alignment:       1119exposesReturnsTwice: false120legalized:       false121regBankSelected: false122selected:        false123tracksRegLiveness: true124registers:125  - { id: 0, class: sreg_64 }126  - { id: 1, class: sreg_32 }127  - { id: 2, class: sgpr_32 }128  - { id: 3, class: vgpr_32 }129  - { id: 4, class: sreg_64 }130  - { id: 5, class: sreg_32 }131  - { id: 6, class: sreg_64 }132  - { id: 7, class: sreg_32 }133  - { id: 8, class: sreg_32 }134  - { id: 9, class: sreg_32 }135  - { id: 10, class: sgpr_128 }136  - { id: 11, class: vgpr_32 }137  - { id: 12, class: vgpr_32 }138  - { id: 13, class: vgpr_32 }139frameInfo:140  isFrameAddressTaken: false141  isReturnAddressTaken: false142  hasStackMap:     false143  hasPatchPoint:   false144  stackSize:       0145  offsetAdjustment: 0146  maxAlignment:    0147  adjustsStack:    false148  hasCalls:        false149  maxCallFrameSize: 0150  hasOpaqueSPAdjustment: false151  hasVAStart:      false152  hasMustTailInVarArgFunc: false153body:             |154  bb.0 (%ir-block.0):155    %4 = IMPLICIT_DEF156    %5 = COPY %4.sub1157    %6 = IMPLICIT_DEF158    %7 = COPY %6.sub0159    %8 = S_MOV_B32 61440160    %9 = S_MOV_B32 -1161    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4162    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)163    %12 = V_MOV_B32_e32 1065353216, implicit $exec164    %13 = V_ADD_F16_e64 0, killed %11, 0, %12, 0, 0, implicit $mode, implicit $exec165    BUFFER_STORE_SHORT_OFFSET killed %13, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)166    S_ENDPGM 0167 168...169---170# Materialized f32 inline immediate should not be folded into the f16171# operands172 173# CHECK-LABEL: name: add_f32_1.0_multi_f16_use174# CHECK: %14:vgpr_32 = V_ADD_F16_e32 1065353216, killed %11, implicit $mode, implicit $exec175# CHECK: %15:vgpr_32 = V_ADD_F16_e32 1065353216, killed %12, implicit $mode, implicit $exec176 177 178name:            add_f32_1.0_multi_f16_use179alignment:       1180exposesReturnsTwice: false181legalized:       false182regBankSelected: false183selected:        false184tracksRegLiveness: true185registers:186  - { id: 0, class: sreg_64 }187  - { id: 1, class: sreg_32 }188  - { id: 2, class: sgpr_32 }189  - { id: 3, class: vgpr_32 }190  - { id: 4, class: sreg_64 }191  - { id: 5, class: sreg_32 }192  - { id: 6, class: sreg_64 }193  - { id: 7, class: sreg_32 }194  - { id: 8, class: sreg_32 }195  - { id: 9, class: sreg_32 }196  - { id: 10, class: sgpr_128 }197  - { id: 11, class: vgpr_32 }198  - { id: 12, class: vgpr_32 }199  - { id: 13, class: vgpr_32 }200  - { id: 14, class: vgpr_32 }201  - { id: 15, class: vgpr_32 }202frameInfo:203  isFrameAddressTaken: false204  isReturnAddressTaken: false205  hasStackMap:     false206  hasPatchPoint:   false207  stackSize:       0208  offsetAdjustment: 0209  maxAlignment:    0210  adjustsStack:    false211  hasCalls:        false212  maxCallFrameSize: 0213  hasOpaqueSPAdjustment: false214  hasVAStart:      false215  hasMustTailInVarArgFunc: false216body:             |217  bb.0 (%ir-block.0):218    %4 = IMPLICIT_DEF219    %5 = COPY %4.sub1220    %6 = IMPLICIT_DEF221    %7 = COPY %6.sub0222    %8 = S_MOV_B32 61440223    %9 = S_MOV_B32 -1224    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4225    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)226    %12 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)227    %13 = V_MOV_B32_e32 1065353216, implicit $exec228    %14 = V_ADD_F16_e64 0, killed %11, 0, %13, 0, 0, implicit $mode, implicit $exec229    %15 = V_ADD_F16_e64 0, killed %12, 0, killed %13, 0, 0, implicit $mode, implicit $exec230    BUFFER_STORE_SHORT_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)231    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)232    S_ENDPGM 0233 234...235---236 237# f32 1.0 should be folded into the single f32 use as an inline238#  immediate, and folded into the single f16 use as a literal constant239 240# CHECK-LABEL: name: add_f32_1.0_one_f32_use_one_f16_use241# CHECK: %15:vgpr_32 = V_ADD_F16_e32 1065353216, %11, implicit $mode, implicit $exec242# CHECK: %16:vgpr_32 = V_ADD_F32_e32 1065353216, killed %13, implicit $mode, implicit $exec243 244name:            add_f32_1.0_one_f32_use_one_f16_use245alignment:       1246exposesReturnsTwice: false247legalized:       false248regBankSelected: false249selected:        false250tracksRegLiveness: true251registers:252  - { id: 0, class: sreg_64 }253  - { id: 1, class: sreg_32 }254  - { id: 2, class: sgpr_32 }255  - { id: 3, class: vgpr_32 }256  - { id: 4, class: sreg_64 }257  - { id: 5, class: sreg_32 }258  - { id: 6, class: sreg_64 }259  - { id: 7, class: sreg_32 }260  - { id: 8, class: sreg_32 }261  - { id: 9, class: sreg_32 }262  - { id: 10, class: sgpr_128 }263  - { id: 11, class: vgpr_32 }264  - { id: 12, class: vgpr_32 }265  - { id: 13, class: vgpr_32 }266  - { id: 14, class: vgpr_32 }267  - { id: 15, class: vgpr_32 }268  - { id: 16, class: vgpr_32 }269frameInfo:270  isFrameAddressTaken: false271  isReturnAddressTaken: false272  hasStackMap:     false273  hasPatchPoint:   false274  stackSize:       0275  offsetAdjustment: 0276  maxAlignment:    0277  adjustsStack:    false278  hasCalls:        false279  maxCallFrameSize: 0280  hasOpaqueSPAdjustment: false281  hasVAStart:      false282  hasMustTailInVarArgFunc: false283body:             |284  bb.0 (%ir-block.0):285    %4 = IMPLICIT_DEF286    %5 = COPY %4.sub1287    %6 = IMPLICIT_DEF288    %7 = COPY %6.sub0289    %8 = S_MOV_B32 61440290    %9 = S_MOV_B32 -1291    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4292    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)293    %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)294    %13 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)295    %14 = V_MOV_B32_e32 1065353216, implicit $exec296    %15 = V_ADD_F16_e64 0, %11, 0, %14, 0, 0, implicit $mode, implicit $exec297    %16 = V_ADD_F32_e64 0, killed %13, 0, killed %14, 0, 0, implicit $mode, implicit $exec298    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)299    BUFFER_STORE_DWORD_OFFSET killed %16, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`)300    S_ENDPGM 0301 302...303---304 305# f32 1.0 should be folded for the single f32 use as an inline306#  constant, and not folded as a multi-use literal for the f16 cases307 308# CHECK-LABEL: name: add_f32_1.0_one_f32_use_multi_f16_use309# CHECK: %15:vgpr_32 = V_ADD_F16_e32 1065353216, %11, implicit $mode, implicit $exec310# CHECK: %16:vgpr_32 = V_ADD_F16_e32 1065353216, %12, implicit $mode, implicit $exec311# CHECK: %17:vgpr_32 = V_ADD_F32_e32 1065353216, killed %13, implicit $mode, implicit $exec312 313name:            add_f32_1.0_one_f32_use_multi_f16_use314alignment:       1315exposesReturnsTwice: false316legalized:       false317regBankSelected: false318selected:        false319tracksRegLiveness: true320registers:321  - { id: 0, class: sreg_64 }322  - { id: 1, class: sreg_32 }323  - { id: 2, class: sgpr_32 }324  - { id: 3, class: vgpr_32 }325  - { id: 4, class: sreg_64 }326  - { id: 5, class: sreg_32 }327  - { id: 6, class: sreg_64 }328  - { id: 7, class: sreg_32 }329  - { id: 8, class: sreg_32 }330  - { id: 9, class: sreg_32 }331  - { id: 10, class: sgpr_128 }332  - { id: 11, class: vgpr_32 }333  - { id: 12, class: vgpr_32 }334  - { id: 13, class: vgpr_32 }335  - { id: 14, class: vgpr_32 }336  - { id: 15, class: vgpr_32 }337  - { id: 16, class: vgpr_32 }338  - { id: 17, class: vgpr_32 }339frameInfo:340  isFrameAddressTaken: false341  isReturnAddressTaken: false342  hasStackMap:     false343  hasPatchPoint:   false344  stackSize:       0345  offsetAdjustment: 0346  maxAlignment:    0347  adjustsStack:    false348  hasCalls:        false349  maxCallFrameSize: 0350  hasOpaqueSPAdjustment: false351  hasVAStart:      false352  hasMustTailInVarArgFunc: false353body:             |354  bb.0 (%ir-block.0):355    %4 = IMPLICIT_DEF356    %5 = COPY %4.sub1357    %6 = IMPLICIT_DEF358    %7 = COPY %6.sub0359    %8 = S_MOV_B32 61440360    %9 = S_MOV_B32 -1361    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4362    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)363    %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)364    %13 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)365    %14 = V_MOV_B32_e32 1065353216, implicit $exec366    %15 = V_ADD_F16_e64 0, %11, 0, %14, 0, 0, implicit $mode, implicit $exec367    %16 = V_ADD_F16_e64 0, %12, 0, %14, 0, 0, implicit $mode, implicit $exec368    %17 = V_ADD_F32_e64 0, killed %13, 0, killed %14, 0, 0, implicit $mode, implicit $exec369    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)370    BUFFER_STORE_SHORT_OFFSET killed %16, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)371    BUFFER_STORE_DWORD_OFFSET killed %17, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`)372    S_ENDPGM 0373 374...375---376# CHECK-LABEL: name: add_i32_1_multi_f16_use377# CHECK: %14:vgpr_32 = V_ADD_F16_e32 1, killed %11, implicit $mode, implicit $exec378# CHECK: %15:vgpr_32 = V_ADD_F16_e32 1, killed %12, implicit $mode, implicit $exec379 380 381name:            add_i32_1_multi_f16_use382alignment:       1383exposesReturnsTwice: false384legalized:       false385regBankSelected: false386selected:        false387tracksRegLiveness: true388registers:389  - { id: 0, class: sreg_64 }390  - { id: 1, class: sreg_32 }391  - { id: 2, class: sgpr_32 }392  - { id: 3, class: vgpr_32 }393  - { id: 4, class: sreg_64 }394  - { id: 5, class: sreg_32 }395  - { id: 6, class: sreg_64 }396  - { id: 7, class: sreg_32 }397  - { id: 8, class: sreg_32 }398  - { id: 9, class: sreg_32 }399  - { id: 10, class: sgpr_128 }400  - { id: 11, class: vgpr_32 }401  - { id: 12, class: vgpr_32 }402  - { id: 13, class: vgpr_32 }403  - { id: 14, class: vgpr_32 }404  - { id: 15, class: vgpr_32 }405frameInfo:406  isFrameAddressTaken: false407  isReturnAddressTaken: false408  hasStackMap:     false409  hasPatchPoint:   false410  stackSize:       0411  offsetAdjustment: 0412  maxAlignment:    0413  adjustsStack:    false414  hasCalls:        false415  maxCallFrameSize: 0416  hasOpaqueSPAdjustment: false417  hasVAStart:      false418  hasMustTailInVarArgFunc: false419body:             |420  bb.0 (%ir-block.0):421    %4 = IMPLICIT_DEF422    %5 = COPY %4.sub1423    %6 = IMPLICIT_DEF424    %7 = COPY %6.sub0425    %8 = S_MOV_B32 61440426    %9 = S_MOV_B32 -1427    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4428    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)429    %12 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)430    %13 = V_MOV_B32_e32 1, implicit $exec431    %14 = V_ADD_F16_e64 0, killed %11, 0, %13, 0, 0, implicit $mode, implicit $exec432    %15 = V_ADD_F16_e64 0, killed %12, 0, killed %13, 0, 0, implicit $mode, implicit $exec433    BUFFER_STORE_SHORT_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)434    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)435    S_ENDPGM 0436 437...438---439 440# CHECK-LABEL: name: add_i32_m2_one_f32_use_multi_f16_use441# CHECK: %15:vgpr_32 = V_ADD_F16_e32 -2, %11, implicit $mode, implicit $exec442# CHECK: %16:vgpr_32 = V_ADD_F16_e32 -2, %12, implicit $mode, implicit $exec443# CHECK: %17:vgpr_32 = V_ADD_F32_e32 -2, killed %13, implicit $mode, implicit $exec444 445name:            add_i32_m2_one_f32_use_multi_f16_use446alignment:       1447exposesReturnsTwice: false448legalized:       false449regBankSelected: false450selected:        false451tracksRegLiveness: true452registers:453  - { id: 0, class: sreg_64 }454  - { id: 1, class: sreg_32 }455  - { id: 2, class: sgpr_32 }456  - { id: 3, class: vgpr_32 }457  - { id: 4, class: sreg_64 }458  - { id: 5, class: sreg_32 }459  - { id: 6, class: sreg_64 }460  - { id: 7, class: sreg_32 }461  - { id: 8, class: sreg_32 }462  - { id: 9, class: sreg_32 }463  - { id: 10, class: sgpr_128 }464  - { id: 11, class: vgpr_32 }465  - { id: 12, class: vgpr_32 }466  - { id: 13, class: vgpr_32 }467  - { id: 14, class: vgpr_32 }468  - { id: 15, class: vgpr_32 }469  - { id: 16, class: vgpr_32 }470  - { id: 17, class: vgpr_32 }471frameInfo:472  isFrameAddressTaken: false473  isReturnAddressTaken: false474  hasStackMap:     false475  hasPatchPoint:   false476  stackSize:       0477  offsetAdjustment: 0478  maxAlignment:    0479  adjustsStack:    false480  hasCalls:        false481  maxCallFrameSize: 0482  hasOpaqueSPAdjustment: false483  hasVAStart:      false484  hasMustTailInVarArgFunc: false485body:             |486  bb.0 (%ir-block.0):487    %4 = IMPLICIT_DEF488    %5 = COPY %4.sub1489    %6 = IMPLICIT_DEF490    %7 = COPY %6.sub0491    %8 = S_MOV_B32 61440492    %9 = S_MOV_B32 -1493    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4494    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)495    %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)496    %13 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)497    %14 = V_MOV_B32_e32 -2, implicit $exec498    %15 = V_ADD_F16_e64 0, %11, 0, %14, 0, 0, implicit $mode, implicit $exec499    %16 = V_ADD_F16_e64 0, %12, 0, %14, 0, 0, implicit $mode, implicit $exec500    %17 = V_ADD_F32_e64 0, killed %13, 0, killed %14, 0, 0, implicit $mode, implicit $exec501    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)502    BUFFER_STORE_SHORT_OFFSET killed %16, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)503    BUFFER_STORE_DWORD_OFFSET killed %17, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`)504    S_ENDPGM 0505 506...507---508 509# f32 1.0 should be folded for the single f32 use as an inline510#  constant, and not folded as a multi-use literal for the f16 cases511 512# CHECK-LABEL: name: add_f16_1.0_multi_f32_use513# CHECK: %14:vgpr_32 = V_ADD_F32_e32 15360, %11, implicit $mode, implicit $exec514# CHECK: %15:vgpr_32 = V_ADD_F32_e32 15360, %12, implicit $mode, implicit $exec515 516name:            add_f16_1.0_multi_f32_use517alignment:       1518exposesReturnsTwice: false519legalized:       false520regBankSelected: false521selected:        false522tracksRegLiveness: true523registers:524  - { id: 0, class: sreg_64 }525  - { id: 1, class: sreg_32 }526  - { id: 2, class: sgpr_32 }527  - { id: 3, class: vgpr_32 }528  - { id: 4, class: sreg_64 }529  - { id: 5, class: sreg_32 }530  - { id: 6, class: sreg_64 }531  - { id: 7, class: sreg_32 }532  - { id: 8, class: sreg_32 }533  - { id: 9, class: sreg_32 }534  - { id: 10, class: sgpr_128 }535  - { id: 11, class: vgpr_32 }536  - { id: 12, class: vgpr_32 }537  - { id: 13, class: vgpr_32 }538  - { id: 14, class: vgpr_32 }539  - { id: 15, class: vgpr_32 }540frameInfo:541  isFrameAddressTaken: false542  isReturnAddressTaken: false543  hasStackMap:     false544  hasPatchPoint:   false545  stackSize:       0546  offsetAdjustment: 0547  maxAlignment:    0548  adjustsStack:    false549  hasCalls:        false550  maxCallFrameSize: 0551  hasOpaqueSPAdjustment: false552  hasVAStart:      false553  hasMustTailInVarArgFunc: false554body:             |555  bb.0 (%ir-block.0):556    %4 = IMPLICIT_DEF557    %5 = COPY %4.sub1558    %6 = IMPLICIT_DEF559    %7 = COPY %6.sub0560    %8 = S_MOV_B32 61440561    %9 = S_MOV_B32 -1562    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4563    %11 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)564    %12 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)565    %13 = V_MOV_B32_e32 15360, implicit $exec566    %14 = V_ADD_F32_e64 0, %11, 0, %13, 0, 0, implicit $mode, implicit $exec567    %15 = V_ADD_F32_e64 0, %12, 0, %13, 0, 0, implicit $mode, implicit $exec568    BUFFER_STORE_DWORD_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`)569    BUFFER_STORE_DWORD_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`)570    S_ENDPGM 0571 572...573---574 575# The low 16-bits are an inline immediate, but the high bits are junk576 577# CHECK-LABEL: name: add_f16_1.0_other_high_bits_multi_f16_use578# CHECK: %14:vgpr_32 = V_ADD_F16_e32 80886784, %11, implicit $mode, implicit $exec579# CHECK: %15:vgpr_32 = V_ADD_F16_e32 80886784, %12, implicit $mode, implicit $exec580 581name:            add_f16_1.0_other_high_bits_multi_f16_use582alignment:       1583exposesReturnsTwice: false584legalized:       false585regBankSelected: false586selected:        false587tracksRegLiveness: true588registers:589  - { id: 0, class: sreg_64 }590  - { id: 1, class: sreg_32 }591  - { id: 2, class: sgpr_32 }592  - { id: 3, class: vgpr_32 }593  - { id: 4, class: sreg_64 }594  - { id: 5, class: sreg_32 }595  - { id: 6, class: sreg_64 }596  - { id: 7, class: sreg_32 }597  - { id: 8, class: sreg_32 }598  - { id: 9, class: sreg_32 }599  - { id: 10, class: sgpr_128 }600  - { id: 11, class: vgpr_32 }601  - { id: 12, class: vgpr_32 }602  - { id: 13, class: vgpr_32 }603  - { id: 14, class: vgpr_32 }604  - { id: 15, class: vgpr_32 }605frameInfo:606  isFrameAddressTaken: false607  isReturnAddressTaken: false608  hasStackMap:     false609  hasPatchPoint:   false610  stackSize:       0611  offsetAdjustment: 0612  maxAlignment:    0613  adjustsStack:    false614  hasCalls:        false615  maxCallFrameSize: 0616  hasOpaqueSPAdjustment: false617  hasVAStart:      false618  hasMustTailInVarArgFunc: false619body:             |620  bb.0 (%ir-block.0):621    %4 = IMPLICIT_DEF622    %5 = COPY %4.sub1623    %6 = IMPLICIT_DEF624    %7 = COPY %6.sub0625    %8 = S_MOV_B32 61440626    %9 = S_MOV_B32 -1627    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4628    %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)629    %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)630    %13 = V_MOV_B32_e32 80886784, implicit $exec631    %14 = V_ADD_F16_e64 0, %11, 0, %13, 0, 0, implicit $mode, implicit $exec632    %15 = V_ADD_F16_e64 0, %12, 0, %13, 0, 0, implicit $mode, implicit $exec633    BUFFER_STORE_SHORT_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)634    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)635    S_ENDPGM 0636 637...638---639 640# CHECK-LABEL: name: add_f16_1.0_other_high_bits_use_f16_f32641# CHECK: %14:vgpr_32 = V_ADD_F32_e32 305413120, %11, implicit $mode, implicit $exec642# CHECK: %15:vgpr_32 = V_ADD_F16_e32 305413120, %12, implicit $mode, implicit $exec643name:            add_f16_1.0_other_high_bits_use_f16_f32644alignment:       1645exposesReturnsTwice: false646legalized:       false647regBankSelected: false648selected:        false649tracksRegLiveness: true650registers:651  - { id: 0, class: sreg_64 }652  - { id: 1, class: sreg_32 }653  - { id: 2, class: sgpr_32 }654  - { id: 3, class: vgpr_32 }655  - { id: 4, class: sreg_64 }656  - { id: 5, class: sreg_32 }657  - { id: 6, class: sreg_64 }658  - { id: 7, class: sreg_32 }659  - { id: 8, class: sreg_32 }660  - { id: 9, class: sreg_32 }661  - { id: 10, class: sgpr_128 }662  - { id: 11, class: vgpr_32 }663  - { id: 12, class: vgpr_32 }664  - { id: 13, class: vgpr_32 }665  - { id: 14, class: vgpr_32 }666  - { id: 15, class: vgpr_32 }667frameInfo:668  isFrameAddressTaken: false669  isReturnAddressTaken: false670  hasStackMap:     false671  hasPatchPoint:   false672  stackSize:       0673  offsetAdjustment: 0674  maxAlignment:    0675  adjustsStack:    false676  hasCalls:        false677  maxCallFrameSize: 0678  hasOpaqueSPAdjustment: false679  hasVAStart:      false680  hasMustTailInVarArgFunc: false681body:             |682  bb.0 (%ir-block.0):683    %4 = IMPLICIT_DEF684    %5 = COPY %4.sub1685    %6 = IMPLICIT_DEF686    %7 = COPY %6.sub0687    %8 = S_MOV_B32 61440688    %9 = S_MOV_B32 -1689    %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4690    %11 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) poison`)691    %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) poison`)692    %13 = V_MOV_B32_e32 305413120, implicit $exec693    %14 = V_ADD_F32_e64 0, %11, 0, %13, 0, 0, implicit $mode, implicit $exec694    %15 = V_ADD_F16_e64 0, %12, 0, %13, 0, 0, implicit $mode, implicit $exec695    BUFFER_STORE_DWORD_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`)696    BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) poison`)697    S_ENDPGM 0698 699...700