Home | History | Annotate | Download | only in InstCombine
      1 ; Test some floating point casting cases
      2 ; RUN: opt < %s -instcombine -S | FileCheck %s
      3 
      4 define i8 @test1() {
      5         %x = fptoui float 2.550000e+02 to i8            ; <i8> [#uses=1]
      6         ret i8 %x
      7 ; CHECK: ret i8 -1
      8 }
      9 
     10 define i8 @test2() {
     11         %x = fptosi float -1.000000e+00 to i8           ; <i8> [#uses=1]
     12         ret i8 %x
     13 ; CHECK: ret i8 -1
     14 }
     15 
     16 ; CHECK: test3
     17 define half @test3(float %a) {
     18 ; CHECK: fptrunc
     19 ; CHECK: llvm.fabs.f16
     20   %b = call float @llvm.fabs.f32(float %a)
     21   %c = fptrunc float %b to half
     22   ret half %c
     23 }
     24 
     25 ; CHECK: test4
     26 define half @test4(float %a) {
     27 ; CHECK: fptrunc
     28 ; CHECK: fsub
     29   %b = fsub float -0.0, %a
     30   %c = fptrunc float %b to half
     31   ret half %c
     32 }
     33 
     34 ; CHECK: test4-fast
     35 define half @test4-fast(float %a) {
     36 ; CHECK: fptrunc
     37 ; CHECK: fsub fast
     38   %b = fsub fast float -0.0, %a
     39   %c = fptrunc float %b to half
     40   ret half %c
     41 }
     42 
     43 ; CHECK: test5
     44 define half @test5(float %a, float %b, float %c) {
     45 ; CHECK: fcmp ogt
     46 ; CHECK: fptrunc
     47 ; CHECK: select
     48 ; CHECK: half 0xH3C00
     49   %d = fcmp ogt float %a, %b
     50   %e = select i1 %d, float %c, float 1.0
     51   %f = fptrunc float %e to half
     52   ret half %f
     53 }
     54 
     55 declare float @llvm.fabs.f32(float) nounwind readonly
     56