brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 748a598 Raw
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