96 lines · plain
1# RUN: llc -march=hexagon -mcpu=hexagonv68 -mattr=+hvxv68,+hvx-length128b \2# RUN: -run-pass hexagon-qfp-optimizer -run-pass machineverifier %s -o - | FileCheck %s3 4# Test that the killed RegState from DefMI operands are removed5# killed RegState should be set for MI operands6# CHECK-LABEL: name: qfpAdd7# CHECK: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG1:([0-9]+)]]8# CHECK-NEXT: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG2:([0-9]+)]]9# CHECK-NEXT: V6_vadd_qf32 killed %[[REG1]], killed %[[REG2]]10# CHECK-NEXT: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG3:([0-9]+)]]11# CHECK-NEXT: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG4:([0-9]+)]]12# CHECK-NEXT: V6_vadd_qf32 killed %[[REG3]], killed %[[REG4]]13 14---15name: qfpAdd16tracksRegLiveness: true17 18body: |19 bb.0:20 liveins: $r0, $r1, $r2, $r321 %0:intregs = COPY $r022 %1:intregs = COPY $r123 %2:intregs = COPY $r224 %3:intregs = COPY $r325 %4:hvxvr = V6_vL32Ub_ai %0:intregs, 026 %5:hvxvr = V6_vL32Ub_ai %1:intregs, 027 %6:hvxvr = V6_vL32Ub_ai %2:intregs, 028 %7:hvxvr = V6_vL32Ub_ai %3:intregs, 029 %8:hvxvr = V6_vconv_sf_qf32 killed %4:hvxvr30 %9:hvxvr = V6_vconv_sf_qf32 killed %5:hvxvr31 %10:hvxvr = V6_vadd_sf %8:hvxvr, %9:hvxvr32 %11:hvxvr = V6_vconv_sf_qf32 killed %6:hvxvr33 %12:hvxvr = V6_vconv_sf_qf32 killed %7:hvxvr34 %13:hvxvr = V6_vadd_sf killed %11:hvxvr, killed %12:hvxvr35...36 37 38# Test that the killed RegState from DefMI operands are removed39# CHECK-LABEL: name: qfpAddMix40# CHECK: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG1:([0-9]+)]]41# CHECK-NEXT: V6_vadd_qf32_mix killed %[[REG1]], %{{[0-9]+}}42# CHECK: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG2:([0-9]+)]]43# CHECK-NEXT: V6_vadd_qf32_mix killed %[[REG2]], %{{[0-9]+}}44 45---46name: qfpAddMix47tracksRegLiveness: true48 49body: |50 bb.0:51 liveins: $r0, $r1, $r252 %0:intregs = COPY $r053 %1:intregs = COPY $r154 %2:intregs = COPY $r255 %3:hvxvr = V6_vL32Ub_ai %0:intregs, 056 %4:hvxvr = V6_vL32Ub_ai %1:intregs, 057 %5:hvxvr = V6_vL32Ub_ai %2:intregs, 058 %6:hvxvr = V6_vmpy_qf32_sf %4, %559 %7:hvxvr = V6_vconv_sf_qf32 killed %6:hvxvr60 %8:hvxvr = V6_vadd_sf %3:hvxvr, %7:hvxvr61 %9:hvxvr = V6_vmpy_qf32_sf %4, %562 %10:hvxvr = V6_vconv_sf_qf32 killed %9:hvxvr63 %11:hvxvr = V6_vadd_sf %3:hvxvr, killed %10:hvxvr64...65 66 67# Test that we do generate V6_vsub_qf32_mix for the below test.68# V6_vsub_qf32_mix only allowes qf32 as first operand. In the test qf3269# is passed as first operand. So, V6_vsub_qf32_mix must be generated.70# CHECK-LABEL: name: qfpAddSwapMix71# CHECK: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG1:([0-9]+)]]72# CHECK-NEXT: V6_vadd_qf32_mix killed %[[REG1]], %{{[0-9]+}}73# CHECK: %{{[0-9]+}}:hvxvr = V6_vconv_sf_qf32 %[[REG2:([0-9]+)]]74# CHECK-NEXT: V6_vadd_qf32_mix killed %[[REG2]], %{{[0-9]+}}75 76---77name: qfpAddSwapMix78tracksRegLiveness: true79 80body: |81 bb.0:82 liveins: $r0, $r1, $r283 %0:intregs = COPY $r084 %1:intregs = COPY $r185 %2:intregs = COPY $r286 %3:hvxvr = V6_vL32Ub_ai %0:intregs, 087 %4:hvxvr = V6_vL32Ub_ai %1:intregs, 088 %5:hvxvr = V6_vL32Ub_ai %2:intregs, 089 %6:hvxvr = V6_vmpy_qf32_sf %4, %590 %7:hvxvr = V6_vconv_sf_qf32 killed %6:hvxvr91 %8:hvxvr = V6_vadd_sf %7:hvxvr, %3:hvxvr92 %9:hvxvr = V6_vmpy_qf32_sf %4, %593 %10:hvxvr = V6_vconv_sf_qf32 killed %9:hvxvr94 %11:hvxvr = V6_vadd_sf killed %10:hvxvr, %3:hvxvr95...96