| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: llc -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s |
| |
| define void @_Z10test_truncstore_f64toi32Pjd(ptr %n, double %x) { |
| ; CHECK-LABEL: _Z10test_truncstore_f64toi32Pjd: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: str s0, [x0] |
| ; CHECK-NEXT: ret |
| %i64 = bitcast double %x to i64 |
| %conv = trunc i64 %i64 to i32 |
| store i32 %conv, ptr %n, align 4 |
| ret void |
| } |
| |
| define void @_Z9test_truncstore_f64toi16Ptd(ptr %n, double %x) { |
| ; CHECK-LABEL: _Z9test_truncstore_f64toi16Ptd: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: str h0, [x0] |
| ; CHECK-NEXT: ret |
| %i64 = bitcast double %x to i64 |
| %conv = trunc i64 %i64 to i16 |
| store i16 %conv, ptr %n, align 2 |
| ret void |
| } |
| |
| define void @_Z13test_truncstore_f64toi8Phd(ptr %n, double %x) { |
| ; CHECK-LABEL: _Z13test_truncstore_f64toi8Phd: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: str b0, [x0] |
| ; CHECK-NEXT: ret |
| %i64 = bitcast double %x to i64 |
| %conv = trunc i64 %i64 to i8 |
| store i8 %conv, ptr %n, align 1 |
| ret void |
| } |
| |
| define void @_Z17test_truncstore_f32toi16Ptf(ptr %n, float %x) { |
| ; CHECK-LABEL: _Z17test_truncstore_f32toi16Ptf: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: str h0, [x0] |
| ; CHECK-NEXT: ret |
| %i32 = bitcast float %x to i32 |
| %conv = trunc i32 %i32 to i16 |
| store i16 %conv, ptr %n, align 2 |
| ret void |
| } |
| |
| define void @_Z16test_truncstore_f32toi8Phf(ptr %n, float %x) { |
| ; CHECK-LABEL: _Z16test_truncstore_f32toi8Phf: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: str b0, [x0] |
| ; CHECK-NEXT: ret |
| %i32 = bitcast float %x to i32 |
| %conv = trunc i32 %i32 to i8 |
| store i8 %conv, ptr %n, align 1 |
| ret void |
| } |
| |
| define void @test_truncstore_i64tof32(ptr %n, i64 %x) { |
| ; CHECK-LABEL: test_truncstore_i64tof32: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: fmov d0, x1 |
| ; CHECK-NEXT: fcvt s0, d0 |
| ; CHECK-NEXT: str s0, [x0] |
| ; CHECK-NEXT: ret |
| %d = bitcast i64 %x to double |
| %f = fptrunc double %d to float |
| store float %f, ptr %n, align 4 |
| ret void |
| } |
| |
| define void @test_truncstore_i32tof16(ptr %n, i32 %x) { |
| ; CHECK-LABEL: test_truncstore_i32tof16: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: fmov s0, w1 |
| ; CHECK-NEXT: fcvt h0, s0 |
| ; CHECK-NEXT: str h0, [x0] |
| ; CHECK-NEXT: ret |
| %f = bitcast i32 %x to float |
| %h = fptrunc float %f to half |
| store half %h, ptr %n, align 2 |
| ret void |
| } |