1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s 2 3; Function Attrs: norecurse nounwind readnone 4define float @c2f(i8 signext %a) { 5; CHECK-LABEL: c2f: 6; CHECK: # %bb.0: # %entry 7; CHECK-NEXT: cvt.s.w %s0, %s0 8; CHECK-NEXT: b.l.t (, %s10) 9entry: 10 %conv = sitofp i8 %a to float 11 ret float %conv 12} 13 14; Function Attrs: norecurse nounwind readnone 15define float @s2f(i16 signext %a) { 16; CHECK-LABEL: s2f: 17; CHECK: # %bb.0: # %entry 18; CHECK-NEXT: cvt.s.w %s0, %s0 19; CHECK-NEXT: b.l.t (, %s10) 20entry: 21 %conv = sitofp i16 %a to float 22 ret float %conv 23} 24 25; Function Attrs: norecurse nounwind readnone 26define float @i2f(i32 %a) { 27; CHECK-LABEL: i2f: 28; CHECK: # %bb.0: # %entry 29; CHECK-NEXT: cvt.s.w %s0, %s0 30; CHECK-NEXT: b.l.t (, %s10) 31entry: 32 %conv = sitofp i32 %a to float 33 ret float %conv 34} 35 36; Function Attrs: norecurse nounwind readnone 37define float @l2f(i64 %a) { 38; CHECK-LABEL: l2f: 39; CHECK: # %bb.0: # %entry 40; CHECK-NEXT: cvt.d.l %s0, %s0 41; CHECK-NEXT: cvt.s.d %s0, %s0 42; CHECK-NEXT: b.l.t (, %s10) 43entry: 44 %conv = sitofp i64 %a to float 45 ret float %conv 46} 47 48; Function Attrs: norecurse nounwind readnone 49define float @uc2f(i8 zeroext %a) { 50; CHECK-LABEL: uc2f: 51; CHECK: # %bb.0: # %entry 52; CHECK-NEXT: cvt.s.w %s0, %s0 53; CHECK-NEXT: b.l.t (, %s10) 54entry: 55 %conv = uitofp i8 %a to float 56 ret float %conv 57} 58 59; Function Attrs: norecurse nounwind readnone 60define float @us2f(i16 zeroext %a) { 61; CHECK-LABEL: us2f: 62; CHECK: # %bb.0: # %entry 63; CHECK-NEXT: cvt.s.w %s0, %s0 64; CHECK-NEXT: b.l.t (, %s10) 65entry: 66 %conv = uitofp i16 %a to float 67 ret float %conv 68} 69 70; Function Attrs: norecurse nounwind readnone 71define float @ui2f(i32 %a) { 72; CHECK-LABEL: ui2f: 73; CHECK: # %bb.0: # %entry 74; CHECK-NEXT: and %s0, %s0, (32)0 75; CHECK-NEXT: cvt.d.l %s0, %s0 76; CHECK-NEXT: cvt.s.d %s0, %s0 77; CHECK-NEXT: b.l.t (, %s10) 78entry: 79 %conv = uitofp i32 %a to float 80 ret float %conv 81} 82 83; Function Attrs: norecurse nounwind readnone 84define float @ul2f(i64 %a) { 85; CHECK-LABEL: ul2f: 86; CHECK: # %bb.0: # %entry 87; CHECK-NEXT: cvt.d.l %s1, %s0 88; CHECK-NEXT: cvt.s.d %s1, %s1 89; CHECK-NEXT: srl %s2, %s0, 1 90; CHECK-NEXT: and %s3, 1, %s0 91; CHECK-NEXT: or %s2, %s3, %s2 92; CHECK-NEXT: cvt.d.l %s2, %s2 93; CHECK-NEXT: cvt.s.d %s2, %s2 94; CHECK-NEXT: fadd.s %s2, %s2, %s2 95; CHECK-NEXT: cmov.l.lt %s1, %s2, %s0 96; CHECK-NEXT: or %s0, 0, %s1 97; CHECK-NEXT: b.l.t (, %s10) 98entry: 99 %conv = uitofp i64 %a to float 100 ret float %conv 101} 102 103; Function Attrs: norecurse nounwind readnone 104define double @c2d(i8 signext %a) { 105; CHECK-LABEL: c2d: 106; CHECK: # %bb.0: # %entry 107; CHECK-NEXT: cvt.d.w %s0, %s0 108; CHECK-NEXT: b.l.t (, %s10) 109entry: 110 %conv = sitofp i8 %a to double 111 ret double %conv 112} 113 114; Function Attrs: norecurse nounwind readnone 115define double @s2d(i16 signext %a) { 116; CHECK-LABEL: s2d: 117; CHECK: # %bb.0: # %entry 118; CHECK-NEXT: cvt.d.w %s0, %s0 119; CHECK-NEXT: b.l.t (, %s10) 120entry: 121 %conv = sitofp i16 %a to double 122 ret double %conv 123} 124 125; Function Attrs: norecurse nounwind readnone 126define double @i2d(i32 %a) { 127; CHECK-LABEL: i2d: 128; CHECK: # %bb.0: # %entry 129; CHECK-NEXT: cvt.d.w %s0, %s0 130; CHECK-NEXT: b.l.t (, %s10) 131entry: 132 %conv = sitofp i32 %a to double 133 ret double %conv 134} 135 136; Function Attrs: norecurse nounwind readnone 137define double @l2d(i64 %a) { 138; CHECK-LABEL: l2d: 139; CHECK: # %bb.0: # %entry 140; CHECK-NEXT: cvt.d.l %s0, %s0 141; CHECK-NEXT: b.l.t (, %s10) 142entry: 143 %conv = sitofp i64 %a to double 144 ret double %conv 145} 146 147; Function Attrs: norecurse nounwind readnone 148define double @uc2d(i8 zeroext %a) { 149; CHECK-LABEL: uc2d: 150; CHECK: # %bb.0: # %entry 151; CHECK-NEXT: cvt.d.w %s0, %s0 152; CHECK-NEXT: b.l.t (, %s10) 153entry: 154 %conv = uitofp i8 %a to double 155 ret double %conv 156} 157 158; Function Attrs: norecurse nounwind readnone 159define double @us2d(i16 zeroext %a) { 160; CHECK-LABEL: us2d: 161; CHECK: # %bb.0: # %entry 162; CHECK-NEXT: cvt.d.w %s0, %s0 163; CHECK-NEXT: b.l.t (, %s10) 164entry: 165 %conv = uitofp i16 %a to double 166 ret double %conv 167} 168 169; Function Attrs: norecurse nounwind readnone 170define double @ui2d(i32 %a) { 171; CHECK-LABEL: ui2d: 172; CHECK: # %bb.0: # %entry 173; CHECK-NEXT: and %s0, %s0, (32)0 174; CHECK-NEXT: cvt.d.l %s0, %s0 175; CHECK-NEXT: b.l.t (, %s10) 176entry: 177 %conv = uitofp i32 %a to double 178 ret double %conv 179} 180 181; Function Attrs: norecurse nounwind readnone 182define double @ul2d(i64 %a) { 183; CHECK-LABEL: ul2d: 184; CHECK: # %bb.0: # %entry 185; CHECK-NEXT: srl %s1, %s0, 32 186; CHECK-NEXT: lea.sl %s2, 1160773632 187; CHECK-NEXT: or %s1, %s1, %s2 188; CHECK-NEXT: lea %s2, 1048576 189; CHECK-NEXT: lea.sl %s2, -986710016(, %s2) 190; CHECK-NEXT: fadd.d %s1, %s1, %s2 191; CHECK-NEXT: and %s0, %s0, (32)0 192; CHECK-NEXT: lea.sl %s2, 1127219200 193; CHECK-NEXT: or %s0, %s0, %s2 194; CHECK-NEXT: fadd.d %s0, %s0, %s1 195; CHECK-NEXT: b.l.t (, %s10) 196entry: 197 %conv = uitofp i64 %a to double 198 ret double %conv 199} 200