228 lines · plain
1# RUN: llc -verify-machineinstrs -mtriple aarch64--- \2# RUN: -run-pass=legalizer -mattr=+fullfp16 -global-isel %s -o - \3# RUN: | FileCheck %s4...5---6name: test_v4f16.asin7alignment: 48tracksRegLiveness: true9registers:10 - { id: 0, class: _ }11 - { id: 1, class: _ }12body: |13 bb.0:14 liveins: $d015 ; CHECK-LABEL: name: test_v4f16.asin16 ; CHECK: [[V1:%[0-9]+]]:_(s16), [[V2:%[0-9]+]]:_(s16), [[V3:%[0-9]+]]:_(s16), [[V4:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES %{{[0-9]+}}(<4 x s16>)17 18 ; CHECK-DAG: [[V1_S32:%[0-9]+]]:_(s32) = G_FPEXT [[V1]](s16)19 ; CHECK-NEXT: ADJCALLSTACKDOWN20 ; CHECK-NEXT: $s0 = COPY [[V1_S32]](s32)21 ; CHECK-NEXT: BL &asinf22 ; CHECK-NEXT: ADJCALLSTACKUP23 ; CHECK-NEXT: [[ELT1_S32:%[0-9]+]]:_(s32) = COPY $s024 ; CHECK-NEXT: [[ELT1:%[0-9]+]]:_(s16) = G_FPTRUNC [[ELT1_S32]](s32)25 26 ; CHECK-DAG: [[V2_S32:%[0-9]+]]:_(s32) = G_FPEXT [[V2]](s16)27 ; CHECK-NEXT: ADJCALLSTACKDOWN28 ; CHECK-NEXT: $s0 = COPY [[V2_S32]](s32)29 ; CHECK-NEXT: BL &asinf30 ; CHECK-NEXT: ADJCALLSTACKUP31 ; CHECK-NEXT: [[ELT2_S32:%[0-9]+]]:_(s32) = COPY $s032 ; CHECK-NEXT: [[ELT2:%[0-9]+]]:_(s16) = G_FPTRUNC [[ELT2_S32]](s32)33 34 ; CHECK-DAG: [[V3_S32:%[0-9]+]]:_(s32) = G_FPEXT [[V3]](s16)35 ; CHECK-NEXT: ADJCALLSTACKDOWN36 ; CHECK-NEXT: $s0 = COPY [[V3_S32]](s32)37 ; CHECK-NEXT: BL &asinf38 ; CHECK-NEXT: ADJCALLSTACKUP39 ; CHECK-NEXT: [[ELT3_S32:%[0-9]+]]:_(s32) = COPY $s040 ; CHECK-NEXT: [[ELT3:%[0-9]+]]:_(s16) = G_FPTRUNC [[ELT3_S32]](s32)41 42 ; CHECK-DAG: [[V4_S32:%[0-9]+]]:_(s32) = G_FPEXT [[V4]](s16)43 ; CHECK-NEXT: ADJCALLSTACKDOWN44 ; CHECK-NEXT: $s0 = COPY [[V4_S32]](s32)45 ; CHECK-NEXT: BL &asinf46 ; CHECK-NEXT: ADJCALLSTACKUP47 ; CHECK-NEXT: [[ELT4_S32:%[0-9]+]]:_(s32) = COPY $s048 ; CHECK-NEXT: [[ELT4:%[0-9]+]]:_(s16) = G_FPTRUNC [[ELT4_S32]](s32)49 50 ; CHECK-DAG: %{{[0-9]+}}:_(<4 x s16>) = G_BUILD_VECTOR [[ELT1]](s16), [[ELT2]](s16), [[ELT3]](s16), [[ELT4]](s16)51 52 %0:_(<4 x s16>) = COPY $d053 %1:_(<4 x s16>) = G_FASIN %054 $d0 = COPY %1(<4 x s16>)55 RET_ReallyLR implicit $d056 57...58---59name: test_v8f16.asin60alignment: 461tracksRegLiveness: true62registers:63 - { id: 0, class: _ }64 - { id: 1, class: _ }65body: |66 bb.0:67 liveins: $q068 69 ; CHECK-LABEL: name: test_v8f16.asin70 71 ; This is big, so let's just check for the 8 calls to asinf, the the72 ; G_UNMERGE_VALUES, and the G_BUILD_VECTOR. The other instructions ought73 ; to be covered by the other tests.74 75 ; CHECK: G_UNMERGE_VALUES76 ; CHECK: BL &asinf77 ; CHECK: BL &asinf78 ; CHECK: BL &asinf79 ; CHECK: BL &asinf80 ; CHECK: BL &asinf81 ; CHECK: BL &asinf82 ; CHECK: BL &asinf83 ; CHECK: BL &asinf84 ; CHECK: G_BUILD_VECTOR85 86 %0:_(<8 x s16>) = COPY $q087 %1:_(<8 x s16>) = G_FASIN %088 $q0 = COPY %1(<8 x s16>)89 RET_ReallyLR implicit $q090 91...92---93name: test_v2f32.asin94alignment: 495tracksRegLiveness: true96registers:97 - { id: 0, class: _ }98 - { id: 1, class: _ }99body: |100 bb.0:101 liveins: $d0102 103 ; CHECK-LABEL: name: test_v2f32.asin104 ; CHECK: [[V1:%[0-9]+]]:_(s32), [[V2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES %{{[0-9]+}}(<2 x s32>)105 106 ; CHECK-NEXT: ADJCALLSTACKDOWN107 ; CHECK-DAG: $s0 = COPY [[V1]](s32)108 ; CHECK-DAG: BL &asinf109 ; CHECK-DAG: [[ELT1:%[0-9]+]]:_(s32) = COPY $s0110 ; CHECK-DAG: ADJCALLSTACKUP111 112 ; CHECK-DAG: ADJCALLSTACKDOWN113 ; CHECK-DAG: $s0 = COPY [[V2]](s32)114 ; CHECK-DAG: BL &asinf115 ; CHECK-DAG: [[ELT2:%[0-9]+]]:_(s32) = COPY $s0116 ; CHECK-DAG: ADJCALLSTACKUP117 118 ; CHECK-DAG: %1:_(<2 x s32>) = G_BUILD_VECTOR [[ELT1]](s32), [[ELT2]](s32)119 120 %0:_(<2 x s32>) = COPY $d0121 %1:_(<2 x s32>) = G_FASIN %0122 $d0 = COPY %1(<2 x s32>)123 RET_ReallyLR implicit $d0124 125...126---127name: test_v4f32.asin128alignment: 4129tracksRegLiveness: true130registers:131 - { id: 0, class: _ }132 - { id: 1, class: _ }133body: |134 bb.0:135 liveins: $q0136 ; CHECK-LABEL: name: test_v4f32.asin137 ; CHECK: [[V1:%[0-9]+]]:_(s32), [[V2:%[0-9]+]]:_(s32), [[V3:%[0-9]+]]:_(s32), [[V4:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES %{{[0-9]+}}(<4 x s32>)138 139 ; CHECK-NEXT: ADJCALLSTACKDOWN140 ; CHECK-DAG: $s0 = COPY [[V1]](s32)141 ; CHECK-DAG: BL &asinf142 ; CHECK-DAG: [[ELT1:%[0-9]+]]:_(s32) = COPY $s0143 ; CHECK-DAG: ADJCALLSTACKUP144 145 ; CHECK-DAG: ADJCALLSTACKDOWN146 ; CHECK-DAG: $s0 = COPY [[V2]](s32)147 ; CHECK-DAG: BL &asinf148 ; CHECK-DAG: [[ELT2:%[0-9]+]]:_(s32) = COPY $s0149 ; CHECK-DAG: ADJCALLSTACKUP150 151 ; CHECK-DAG: ADJCALLSTACKDOWN152 ; CHECK-DAG: $s0 = COPY [[V3]](s32)153 ; CHECK-DAG: BL &asinf154 ; CHECK-DAG: [[ELT3:%[0-9]+]]:_(s32) = COPY $s0155 ; CHECK-DAG: ADJCALLSTACKUP156 157 ; CHECK-DAG: ADJCALLSTACKDOWN158 ; CHECK-DAG: $s0 = COPY [[V4]](s32)159 ; CHECK-DAG: BL &asinf160 ; CHECK-DAG: [[ELT4:%[0-9]+]]:_(s32) = COPY $s0161 ; CHECK-DAG: ADJCALLSTACKUP162 163 ; CHECK-DAG: %1:_(<4 x s32>) = G_BUILD_VECTOR [[ELT1]](s32), [[ELT2]](s32), [[ELT3]](s32), [[ELT4]](s32)164 165 %0:_(<4 x s32>) = COPY $q0166 %1:_(<4 x s32>) = G_FASIN %0167 $q0 = COPY %1(<4 x s32>)168 RET_ReallyLR implicit $q0169 170...171---172name: test_v2f64.asin173alignment: 4174tracksRegLiveness: true175registers:176 - { id: 0, class: _ }177 - { id: 1, class: _ }178body: |179 bb.0:180 liveins: $q0181 182 ; CHECK-LABEL: name: test_v2f64.asin183 ; CHECK: [[V1:%[0-9]+]]:_(s64), [[V2:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES %{{[0-9]+}}(<2 x s64>)184 185 ; CHECK-NEXT: ADJCALLSTACKDOWN186 ; CHECK-DAG: $d0 = COPY [[V1]](s64)187 ; CHECK-DAG: BL &asin188 ; CHECK-DAG: [[ELT1:%[0-9]+]]:_(s64) = COPY $d0189 ; CHECK-DAG: ADJCALLSTACKUP190 191 ; CHECK-DAG: ADJCALLSTACKDOWN192 ; CHECK-DAG: $d0 = COPY [[V2]](s64)193 ; CHECK-DAG: BL &asin194 ; CHECK-DAG: [[ELT2:%[0-9]+]]:_(s64) = COPY $d0195 ; CHECK-DAG: ADJCALLSTACKUP196 197 ; CHECK-DAG: %1:_(<2 x s64>) = G_BUILD_VECTOR [[ELT1]](s64), [[ELT2]](s64)198 199 %0:_(<2 x s64>) = COPY $q0200 %1:_(<2 x s64>) = G_FASIN %0201 $q0 = COPY %1(<2 x s64>)202 RET_ReallyLR implicit $q0203 204...205---206name: test_asin_half207alignment: 4208tracksRegLiveness: true209registers:210 - { id: 0, class: _ }211 - { id: 1, class: _ }212body: |213 bb.0:214 liveins: $h0215 ; CHECK-LABEL: name: test_asin_half216 ; CHECK: [[REG1:%[0-9]+]]:_(s32) = G_FPEXT %0(s16)217 ; CHECK-NEXT: ADJCALLSTACKDOWN218 ; CHECK-NEXT: $s0 = COPY [[REG1]](s32)219 ; CHECK-NEXT: BL &asinf220 ; CHECK-NEXT: ADJCALLSTACKUP221 ; CHECK-NEXT: [[REG2:%[0-9]+]]:_(s32) = COPY $s0222 ; CHECK-NEXT: [[RES:%[0-9]+]]:_(s16) = G_FPTRUNC [[REG2]](s32)223 224 %0:_(s16) = COPY $h0225 %1:_(s16) = G_FASIN %0226 $h0 = COPY %1(s16)227 RET_ReallyLR implicit $h0228