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