99 lines · plain
1; RUN: llc -mtriple=thumbv7-linux-gnueabihf %s -o - | FileCheck %s2 3define float @test_load_s32_float(ptr %addr) {4; CHECK-LABEL: test_load_s32_float:5; CHECK: ldr [[TMP:r[0-9]+]], [r0]6; CHECK: vmov [[RES_INT:s[0-9]+]], [[TMP]]7; CHECK: vcvt.f32.s32 s0, [[RES_INT]]8 9 %val = load i32, ptr %addr, align 110 %res = sitofp i32 %val to float11 ret float %res12}13 14define double @test_load_s32_double(ptr %addr) {15; CHECK-LABEL: test_load_s32_double:16; CHECK: ldr [[TMP:r[0-9]+]], [r0]17; CHECK: vmov [[RES_INT:s[0-9]+]], [[TMP]]18; CHECK: vcvt.f64.s32 d0, [[RES_INT]]19 20 %val = load i32, ptr %addr, align 121 %res = sitofp i32 %val to double22 ret double %res23}24 25define float @test_load_u32_float(ptr %addr) {26; CHECK-LABEL: test_load_u32_float:27; CHECK: ldr [[TMP:r[0-9]+]], [r0]28; CHECK: vmov [[RES_INT:s[0-9]+]], [[TMP]]29; CHECK: vcvt.f32.u32 s0, [[RES_INT]]30 31 %val = load i32, ptr %addr, align 132 %res = uitofp i32 %val to float33 ret float %res34}35 36define double @test_load_u32_double(ptr %addr) {37; CHECK-LABEL: test_load_u32_double:38; CHECK: ldr [[TMP:r[0-9]+]], [r0]39; CHECK: vmov [[RES_INT:s[0-9]+]], [[TMP]]40; CHECK: vcvt.f64.u32 d0, [[RES_INT]]41 42 %val = load i32, ptr %addr, align 143 %res = uitofp i32 %val to double44 ret double %res45}46 47define void @test_store_f32(float %in, ptr %addr) {48; CHECK-LABEL: test_store_f32:49; CHECK: vmov [[TMP:r[0-9]+]], s050; CHECK: str [[TMP]], [r0]51 52 store float %in, ptr %addr, align 153 ret void54}55 56define void @test_store_float_s32(float %in, ptr %addr) {57; CHECK-LABEL: test_store_float_s32:58; CHECK: vcvt.s32.f32 [[TMP:s[0-9]+]], s059; CHECK: vmov [[TMP_INT:r[0-9]+]], [[TMP]]60; CHECK: str [[TMP_INT]], [r0]61 62 %val = fptosi float %in to i3263 store i32 %val, ptr %addr, align 164 ret void65}66 67define void @test_store_double_s32(double %in, ptr %addr) {68; CHECK-LABEL: test_store_double_s32:69; CHECK: vcvt.s32.f64 [[TMP:s[0-9]+]], d070; CHECK: vmov [[TMP_INT:r[0-9]+]], [[TMP]]71; CHECK: str [[TMP_INT]], [r0]72 73 %val = fptosi double %in to i3274 store i32 %val, ptr %addr, align 175 ret void76}77 78define void @test_store_float_u32(float %in, ptr %addr) {79; CHECK-LABEL: test_store_float_u32:80; CHECK: vcvt.u32.f32 [[TMP:s[0-9]+]], s081; CHECK: vmov [[TMP_INT:r[0-9]+]], [[TMP]]82; CHECK: str [[TMP_INT]], [r0]83 84 %val = fptoui float %in to i3285 store i32 %val, ptr %addr, align 186 ret void87}88 89define void @test_store_double_u32(double %in, ptr %addr) {90; CHECK-LABEL: test_store_double_u32:91; CHECK: vcvt.u32.f64 [[TMP:s[0-9]+]], d092; CHECK: vmov [[TMP_INT:r[0-9]+]], [[TMP]]93; CHECK: str [[TMP_INT]], [r0]94 95 %val = fptoui double %in to i3296 store i32 %val, ptr %addr, align 197 ret void98}99