| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s |
| --- | |
| define void @truncating_f32(double %x) { |
| %alloca = alloca i32, align 4 |
| %bitcast = bitcast double %x to i64 |
| %trunc = trunc i64 %bitcast to i32 |
| store i32 %trunc, i32* %alloca, align 4 |
| ret void |
| } |
| |
| define void @truncating_f16(double %x) { |
| %alloca = alloca i16, align 2 |
| %bitcast = bitcast double %x to i64 |
| %trunc = trunc i64 %bitcast to i16 |
| store i16 %trunc, i16* %alloca, align 2 |
| ret void |
| } |
| |
| define void @truncating_f8(double %x) { |
| %alloca = alloca i8, align 1 |
| %bitcast = bitcast double %x to i64 |
| %trunc = trunc i64 %bitcast to i8 |
| store i8 %trunc, i8* %alloca, align 1 |
| ret void |
| } |
| |
| ... |
| --- |
| name: truncating_f32 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| liveins: |
| - { reg: '$d0' } |
| frameInfo: |
| maxAlignment: 4 |
| stack: |
| - { id: 0, name: alloca, size: 4, alignment: 4 } |
| machineFunctionInfo: {} |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $d0 |
| |
| ; CHECK-LABEL: name: truncating_f32 |
| ; CHECK: liveins: $d0 |
| ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0 |
| ; CHECK: [[COPY1:%[0-9]+]]:fpr32 = COPY [[COPY]].ssub |
| ; CHECK: STRSui [[COPY1]], %stack.0.alloca, 0 :: (store (s32) into %ir.alloca) |
| ; CHECK: RET_ReallyLR |
| %0:fpr(s64) = COPY $d0 |
| %1:gpr(p0) = G_FRAME_INDEX %stack.0.alloca |
| G_STORE %0(s64), %1(p0) :: (store (s32) into %ir.alloca) |
| RET_ReallyLR |
| |
| ... |
| --- |
| name: truncating_f16 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| liveins: |
| - { reg: '$d0' } |
| frameInfo: |
| maxAlignment: 2 |
| stack: |
| - { id: 0, name: alloca, size: 2, alignment: 2 } |
| machineFunctionInfo: {} |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $d0 |
| |
| ; CHECK-LABEL: name: truncating_f16 |
| ; CHECK: liveins: $d0 |
| ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0 |
| ; CHECK: [[COPY1:%[0-9]+]]:fpr16 = COPY [[COPY]].hsub |
| ; CHECK: STRHui [[COPY1]], %stack.0.alloca, 0 :: (store (s16) into %ir.alloca) |
| ; CHECK: RET_ReallyLR |
| %0:fpr(s64) = COPY $d0 |
| %1:gpr(p0) = G_FRAME_INDEX %stack.0.alloca |
| G_STORE %0(s64), %1(p0) :: (store (s16) into %ir.alloca) |
| RET_ReallyLR |
| |
| ... |
| --- |
| name: truncating_f8 |
| alignment: 4 |
| legalized: true |
| regBankSelected: true |
| tracksRegLiveness: true |
| liveins: |
| - { reg: '$d0' } |
| frameInfo: |
| maxAlignment: 1 |
| stack: |
| - { id: 0, name: alloca, size: 1, alignment: 1 } |
| machineFunctionInfo: {} |
| body: | |
| bb.1 (%ir-block.0): |
| liveins: $d0 |
| |
| ; CHECK-LABEL: name: truncating_f8 |
| ; CHECK: liveins: $d0 |
| ; CHECK: [[COPY:%[0-9]+]]:fpr64 = COPY $d0 |
| ; CHECK: [[COPY1:%[0-9]+]]:fpr8 = COPY [[COPY]].bsub |
| ; CHECK: STRBui [[COPY1]], %stack.0.alloca, 0 :: (store (s8) into %ir.alloca) |
| ; CHECK: RET_ReallyLR |
| %0:fpr(s64) = COPY $d0 |
| %1:gpr(p0) = G_FRAME_INDEX %stack.0.alloca |
| G_STORE %0(s64), %1(p0) :: (store (s8) into %ir.alloca) |
| RET_ReallyLR |
| |
| ... |