1 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr5 | FileCheck %s --check-prefix=ELF64 2 3 ; Test sitofp 4 5 define void @sitofp_double_i32(i32 %a, double %b) nounwind { 6 entry: 7 ; ELF64: sitofp_double_i32 8 %b.addr = alloca double, align 8 9 %conv = sitofp i32 %a to double 10 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1) 11 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1) 12 ; ELF64: fcfid 13 store double %conv, double* %b.addr, align 8 14 ret void 15 } 16 17 define void @sitofp_double_i64(i64 %a, double %b) nounwind { 18 entry: 19 ; ELF64: sitofp_double_i64 20 %b.addr = alloca double, align 8 21 %conv = sitofp i64 %a to double 22 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1) 23 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1) 24 ; ELF64: fcfid 25 store double %conv, double* %b.addr, align 8 26 ret void 27 } 28 29 define void @sitofp_double_i16(i16 %a, double %b) nounwind { 30 entry: 31 ; ELF64: sitofp_double_i16 32 %b.addr = alloca double, align 8 33 %conv = sitofp i16 %a to double 34 ; ELF64: extsh 35 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1) 36 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1) 37 ; ELF64: fcfid 38 store double %conv, double* %b.addr, align 8 39 ret void 40 } 41 42 define void @sitofp_double_i8(i8 %a, double %b) nounwind { 43 entry: 44 ; ELF64: sitofp_double_i8 45 %b.addr = alloca double, align 8 46 %conv = sitofp i8 %a to double 47 ; ELF64: extsb 48 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1) 49 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1) 50 ; ELF64: fcfid 51 store double %conv, double* %b.addr, align 8 52 ret void 53 } 54 55 ; Test fptosi 56 57 define void @fptosi_float_i32(float %a) nounwind { 58 entry: 59 ; ELF64: fptosi_float_i32 60 %b.addr = alloca i32, align 4 61 %conv = fptosi float %a to i32 62 ; ELF64: fctiwz 63 ; ELF64: stfd 64 ; ELF64: lwa 65 store i32 %conv, i32* %b.addr, align 4 66 ret void 67 } 68 69 define void @fptosi_float_i64(float %a) nounwind { 70 entry: 71 ; ELF64: fptosi_float_i64 72 %b.addr = alloca i64, align 4 73 %conv = fptosi float %a to i64 74 ; ELF64: fctidz 75 ; ELF64: stfd 76 ; ELF64: ld 77 store i64 %conv, i64* %b.addr, align 4 78 ret void 79 } 80 81 define void @fptosi_double_i32(double %a) nounwind { 82 entry: 83 ; ELF64: fptosi_double_i32 84 %b.addr = alloca i32, align 8 85 %conv = fptosi double %a to i32 86 ; ELF64: fctiwz 87 ; ELF64: stfd 88 ; ELF64: lwa 89 store i32 %conv, i32* %b.addr, align 8 90 ret void 91 } 92 93 define void @fptosi_double_i64(double %a) nounwind { 94 entry: 95 ; ELF64: fptosi_double_i64 96 %b.addr = alloca i64, align 8 97 %conv = fptosi double %a to i64 98 ; ELF64: fctidz 99 ; ELF64: stfd 100 ; ELF64: ld 101 store i64 %conv, i64* %b.addr, align 8 102 ret void 103 } 104 105 ; Test fptoui 106 107 define void @fptoui_float_i32(float %a) nounwind { 108 entry: 109 ; ELF64: fptoui_float_i32 110 %b.addr = alloca i32, align 4 111 %conv = fptoui float %a to i32 112 ; ELF64: fctidz 113 ; ELF64: stfd 114 ; ELF64: lwz 115 store i32 %conv, i32* %b.addr, align 4 116 ret void 117 } 118 119 define void @fptoui_double_i32(double %a) nounwind { 120 entry: 121 ; ELF64: fptoui_double_i32 122 %b.addr = alloca i32, align 8 123 %conv = fptoui double %a to i32 124 ; ELF64: fctidz 125 ; ELF64: stfd 126 ; ELF64: lwz 127 store i32 %conv, i32* %b.addr, align 8 128 ret void 129 } 130 131