1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
---
name: rcp_sqrt_test_f32
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: rcp_sqrt_test_f32
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[FSQRT:%[0-9]+]]:_(s32) = G_FSQRT [[COPY]]
; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[FSQRT]](s32)
; GCN-NEXT: $vgpr0 = COPY [[INT]](s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%2:_(s32) = G_FSQRT %0:_
%3:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %2:_(s32)
$vgpr0 = COPY %3:_(s32)
SI_RETURN_TO_EPILOG implicit $vgpr0
...
---
name: contract_afn_rcp_contract_sqrt_test_f32
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: contract_afn_rcp_contract_sqrt_test_f32
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), [[COPY]](s32)
; GCN-NEXT: $vgpr0 = COPY [[INT]](s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%2:_(s32) = contract G_FSQRT %0:_
%3:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %2:_(s32)
$vgpr0 = COPY %3:_(s32)
SI_RETURN_TO_EPILOG implicit $vgpr0
...
---
name: sqrt_rcp_test_f32
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: sqrt_rcp_test_f32
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[COPY]](s32)
; GCN-NEXT: [[FSQRT:%[0-9]+]]:_(s32) = G_FSQRT [[INT]]
; GCN-NEXT: $vgpr0 = COPY [[FSQRT]](s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%2:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %0:_(s32)
%3:_(s32) = G_FSQRT %2:_
$vgpr0 = COPY %3:_(s32)
SI_RETURN_TO_EPILOG implicit $vgpr0
...
---
name: afn_rcp_afn_amdgcn_sqrt_test_f32
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: afn_rcp_afn_amdgcn_sqrt_test_f32
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), [[COPY]](s32)
; GCN-NEXT: [[INT1:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[INT]](s32)
; GCN-NEXT: $vgpr0 = COPY [[INT1]](s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%1:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), %0:_(s32)
%2:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %1:_(s32)
$vgpr0 = COPY %2
SI_RETURN_TO_EPILOG implicit $vgpr0
...
---
name: afn_contract_rcp_afn_contract_amdgcn_sqrt_test_f32
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: afn_contract_rcp_afn_contract_amdgcn_sqrt_test_f32
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), [[COPY]](s32)
; GCN-NEXT: [[INT1:%[0-9]+]]:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[INT]](s32)
; GCN-NEXT: $vgpr0 = COPY [[INT1]](s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%1:_(s32) = afn contract G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), %0:_(s32)
%2:_(s32) = afn contract G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %1:_(s32)
$vgpr0 = COPY %2
SI_RETURN_TO_EPILOG implicit $vgpr0
...
---
name: rsq_test_f16
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: rsq_test_f16
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
; GCN-NEXT: %sqrt:_(s16) = G_FSQRT [[TRUNC]]
; GCN-NEXT: %one:_(s16) = contract G_FCONSTANT half 0xH3C00
; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt
; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)
; GCN-NEXT: $vgpr0 = COPY %ext(s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%1:_(s16) = G_TRUNC %0
%sqrt:_(s16) = G_FSQRT %1:_
%one:_(s16) = contract G_FCONSTANT half 1.0
%rsq:_(s16) = contract G_FDIV %one, %sqrt
%ext:_(s32) = G_ANYEXT %rsq
$vgpr0 = COPY %ext
SI_RETURN_TO_EPILOG implicit $vgpr0
...
---
name: neg_rsq_test_f16
body: |
bb.0:
liveins: $sgpr0
; GCN-LABEL: name: neg_rsq_test_f16
; GCN: liveins: $sgpr0
; GCN-NEXT: {{ $}}
; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
; GCN-NEXT: %sqrt:_(s16) = G_FSQRT [[TRUNC]]
; GCN-NEXT: %one:_(s16) = contract G_FCONSTANT half 0xHBC00
; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt
; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)
; GCN-NEXT: $vgpr0 = COPY %ext(s32)
; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
%0:_(s32) = COPY $sgpr0
%1:_(s16) = G_TRUNC %0
%sqrt:_(s16) = G_FSQRT %1:_
%one:_(s16) = contract G_FCONSTANT half -1.0
%rsq:_(s16) = contract G_FDIV %one, %sqrt
%ext:_(s32) = G_ANYEXT %rsq
$vgpr0 = COPY %ext
SI_RETURN_TO_EPILOG implicit $vgpr0
...
|