207 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 62# RUN: llc -mtriple=aarch64 -run-pass=legalizer %s -o - | FileCheck %s3---4name: test_modf_f165body: |6 bb.0.entry:7 ; CHECK-LABEL: name: test_modf_f168 ; CHECK: [[COPY:%[0-9]+]]:_(s16) = COPY $h09 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[COPY]](s16)10 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.011 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp12 ; CHECK-NEXT: $s0 = COPY [[FPEXT]](s32)13 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)14 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s015 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp16 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s017 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %stack.0)18 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD]](s32)19 ; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)20 ; CHECK-NEXT: $h0 = COPY [[FPTRUNC1]](s16)21 ; CHECK-NEXT: $h1 = COPY [[FPTRUNC]](s16)22 ; CHECK-NEXT: RET_ReallyLR implicit $h0, implicit $h123 %0:_(s16) = COPY $h024 %1:_(s16), %2:_(s16) = G_FMODF %025 $h0 = COPY %1(s16)26 $h1 = COPY %2(s16)27 RET_ReallyLR implicit $h0, implicit $h128...29---30name: test_modf_f16_only_use_fractional_part31body: |32 bb.0.entry:33 ; CHECK-LABEL: name: test_modf_f16_only_use_fractional_part34 ; CHECK: [[COPY:%[0-9]+]]:_(s16) = COPY $h035 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[COPY]](s16)36 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.037 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp38 ; CHECK-NEXT: $s0 = COPY [[FPEXT]](s32)39 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)40 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s041 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp42 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s043 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)44 ; CHECK-NEXT: $h0 = COPY [[FPTRUNC]](s16)45 ; CHECK-NEXT: RET_ReallyLR implicit $h046 %0:_(s16) = COPY $h047 %1:_(s16), %2:_(s16) = G_FMODF %048 $h0 = COPY %1(s16)49 RET_ReallyLR implicit $h050...51---52name: test_modf_v2f1653body: |54 bb.0.entry:55 ; CHECK-LABEL: name: test_modf_v2f1656 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d057 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)58 ; CHECK-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT [[UV]](s16)59 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.160 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp61 ; CHECK-NEXT: $s0 = COPY [[FPEXT]](s32)62 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)63 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s064 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp65 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s066 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %stack.1)67 ; CHECK-NEXT: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD]](s32)68 ; CHECK-NEXT: [[FPTRUNC1:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY1]](s32)69 ; CHECK-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT [[UV1]](s16)70 ; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.071 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp72 ; CHECK-NEXT: $s0 = COPY [[FPEXT1]](s32)73 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX1]](p0)74 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s075 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp76 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s077 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (s32) from %stack.0)78 ; CHECK-NEXT: [[FPTRUNC2:%[0-9]+]]:_(s16) = G_FPTRUNC [[LOAD1]](s32)79 ; CHECK-NEXT: [[FPTRUNC3:%[0-9]+]]:_(s16) = G_FPTRUNC [[COPY2]](s32)80 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF81 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC1]](s16), [[FPTRUNC3]](s16), [[DEF]](s16), [[DEF]](s16)82 ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[FPTRUNC]](s16), [[FPTRUNC2]](s16), [[DEF]](s16), [[DEF]](s16)83 ; CHECK-NEXT: $d0 = COPY [[BUILD_VECTOR]](<4 x s16>)84 ; CHECK-NEXT: $d1 = COPY [[BUILD_VECTOR1]](<4 x s16>)85 ; CHECK-NEXT: RET_ReallyLR implicit $d0, implicit $d186 %1:_(<4 x s16>) = COPY $d087 %0:_(<2 x s16>), %2:_(<2 x s16>) = G_UNMERGE_VALUES %1(<4 x s16>)88 %3:_(<2 x s16>), %4:_(<2 x s16>) = G_FMODF %089 %5:_(s16), %6:_(s16) = G_UNMERGE_VALUES %3(<2 x s16>)90 %7:_(s16) = G_IMPLICIT_DEF91 %8:_(<4 x s16>) = G_BUILD_VECTOR %5(s16), %6(s16), %7(s16), %7(s16)92 %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %4(<2 x s16>)93 %11:_(<4 x s16>) = G_BUILD_VECTOR %9(s16), %10(s16), %7(s16), %7(s16)94 $d0 = COPY %8(<4 x s16>)95 $d1 = COPY %11(<4 x s16>)96 RET_ReallyLR implicit $d0, implicit $d197...98---99name: test_modf_v3f32100body: |101 bb.0.entry:102 ; CHECK-LABEL: name: test_modf_v3f32103 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0104 ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<4 x s32>) = G_BITCAST [[COPY]](<2 x s64>)105 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[BITCAST]](<4 x s32>)106 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.2107 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp108 ; CHECK-NEXT: $s0 = COPY [[UV]](s32)109 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)110 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s0111 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp112 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $s0113 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %stack.2)114 ; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1115 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp116 ; CHECK-NEXT: $s0 = COPY [[UV1]](s32)117 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX1]](p0)118 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s0119 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp120 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $s0121 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (s32) from %stack.1)122 ; CHECK-NEXT: [[FRAME_INDEX2:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0123 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp124 ; CHECK-NEXT: $s0 = COPY [[UV2]](s32)125 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX2]](p0)126 ; CHECK-NEXT: BL &modff, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $s0, implicit $x0, implicit-def $s0127 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp128 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $s0129 ; CHECK-NEXT: [[LOAD2:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX2]](p0) :: (load (s32) from %stack.0)130 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF131 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[DEF]](s32)132 ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[LOAD]](s32), [[LOAD1]](s32), [[LOAD2]](s32), [[DEF]](s32)133 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)134 ; CHECK-NEXT: $q1 = COPY [[BUILD_VECTOR1]](<4 x s32>)135 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1136 %1:_(<2 x s64>) = COPY $q0137 %2:_(<4 x s32>) = G_BITCAST %1(<2 x s64>)138 %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %2(<4 x s32>)139 %0:_(<3 x s32>) = G_BUILD_VECTOR %3(s32), %4(s32), %5(s32)140 %7:_(<3 x s32>), %8:_(<3 x s32>) = G_FMODF %0141 %9:_(s32), %10:_(s32), %11:_(s32) = G_UNMERGE_VALUES %7(<3 x s32>)142 %12:_(s32) = G_IMPLICIT_DEF143 %13:_(<4 x s32>) = G_BUILD_VECTOR %9(s32), %10(s32), %11(s32), %12(s32)144 %14:_(s32), %15:_(s32), %16:_(s32) = G_UNMERGE_VALUES %8(<3 x s32>)145 %17:_(<4 x s32>) = G_BUILD_VECTOR %14(s32), %15(s32), %16(s32), %12(s32)146 $q0 = COPY %13(<4 x s32>)147 $q1 = COPY %17(<4 x s32>)148 RET_ReallyLR implicit $q0, implicit $q1149...150---151name: test_modf_v2f64152body: |153 bb.0.entry:154 ; CHECK-LABEL: name: test_modf_v2f64155 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0156 ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)157 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.1158 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp159 ; CHECK-NEXT: $d0 = COPY [[UV]](s64)160 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)161 ; CHECK-NEXT: BL &modf, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit $x0, implicit-def $d0162 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp163 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $d0164 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s64) from %stack.1)165 ; CHECK-NEXT: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0166 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp167 ; CHECK-NEXT: $d0 = COPY [[UV1]](s64)168 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX1]](p0)169 ; CHECK-NEXT: BL &modf, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $d0, implicit $x0, implicit-def $d0170 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp171 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $d0172 ; CHECK-NEXT: [[LOAD1:%[0-9]+]]:_(s64) = G_LOAD [[FRAME_INDEX1]](p0) :: (load (s64) from %stack.0)173 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[COPY1]](s64), [[COPY2]](s64)174 ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[LOAD]](s64), [[LOAD1]](s64)175 ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<2 x s64>)176 ; CHECK-NEXT: $q1 = COPY [[BUILD_VECTOR1]](<2 x s64>)177 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1178 %0:_(<2 x s64>) = COPY $q0179 %1:_(<2 x s64>), %2:_(<2 x s64>) = G_FMODF %0180 $q0 = COPY %1(<2 x s64>)181 $q1 = COPY %2(<2 x s64>)182 RET_ReallyLR implicit $q0, implicit $q1183...184---185name: test_modf_fp128186body: |187 bb.0.entry:188 ; CHECK-LABEL: name: test_modf_fp128189 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0190 ; CHECK-NEXT: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %stack.0191 ; CHECK-NEXT: ADJCALLSTACKDOWN 0, 0, implicit-def $sp, implicit $sp192 ; CHECK-NEXT: $q0 = COPY [[COPY]](s128)193 ; CHECK-NEXT: $x0 = COPY [[FRAME_INDEX]](p0)194 ; CHECK-NEXT: BL &modfl, csr_aarch64_aapcs, implicit-def $lr, implicit $sp, implicit $q0, implicit $x0, implicit-def $q0195 ; CHECK-NEXT: ADJCALLSTACKUP 0, 0, implicit-def $sp, implicit $sp196 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s128) = COPY $q0197 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s128) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s128) from %stack.0)198 ; CHECK-NEXT: $q0 = COPY [[COPY1]](s128)199 ; CHECK-NEXT: $q1 = COPY [[LOAD]](s128)200 ; CHECK-NEXT: RET_ReallyLR implicit $q0, implicit $q1201 %0:_(s128) = COPY $q0202 %1:_(s128), %2:_(s128) = G_FMODF %0203 $q0 = COPY %1(s128)204 $q1 = COPY %2(s128)205 RET_ReallyLR implicit $q0, implicit $q1206...207