Home | History | Annotate | Download | only in SystemZ
      1 ; Test conversion of floating-point values to unsigned i32s (z10 only).
      2 ;
      3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
      4 
      5 ; z10 doesn't have native support for unsigned fp-to-i32 conversions;
      6 ; they were added in z196 as the Convert to Logical family of instructions.
      7 ; Promoting to i64 doesn't generate an inexact condition for values that are
      8 ; outside the i32 range but in the i64 range, so use the default expansion.
      9 
     10 ; Test f32->i32.
     11 define i32 @f1(float %f) {
     12 ; CHECK-LABEL: f1:
     13 ; CHECK: cebr
     14 ; CHECK: sebr
     15 ; CHECK: cfebr
     16 ; CHECK: xilf
     17 ; CHECK: br %r14
     18   %conv = fptoui float %f to i32
     19   ret i32 %conv
     20 }
     21 
     22 ; Test f64->i32.
     23 define i32 @f2(double %f) {
     24 ; CHECK-LABEL: f2:
     25 ; CHECK: cdbr
     26 ; CHECK: sdbr
     27 ; CHECK: cfdbr
     28 ; CHECK: xilf
     29 ; CHECK: br %r14
     30   %conv = fptoui double %f to i32
     31   ret i32 %conv
     32 }
     33 
     34 ; Test f128->i32.
     35 define i32 @f3(fp128 *%src) {
     36 ; CHECK-LABEL: f3:
     37 ; CHECK: cxbr
     38 ; CHECK: sxbr
     39 ; CHECK: cfxbr
     40 ; CHECK: xilf
     41 ; CHECK: br %r14
     42   %f = load fp128 *%src
     43   %conv = fptoui fp128 %f to i32
     44   ret i32 %conv
     45 }
     46