Home | History | Annotate | Download | only in SimplifyCFG
      1 ; RUN: opt -S -simplifycfg -phi-node-folding-threshold=2 < %s | FileCheck %s
      2 
      3 declare float @llvm.sqrt.f32(float) nounwind readonly
      4 declare float @llvm.fma.f32(float, float, float) nounwind readonly
      5 declare float @llvm.fmuladd.f32(float, float, float) nounwind readonly
      6 
      7 ; CHECK-LABEL: @sqrt_test(
      8 ; CHECK: select
      9 define void @sqrt_test(float addrspace(1)* noalias nocapture %out, float %a) nounwind {
     10 entry:
     11   %cmp.i = fcmp olt float %a, 0.000000e+00
     12   br i1 %cmp.i, label %test_sqrt.exit, label %cond.else.i
     13 
     14 cond.else.i:                                      ; preds = %entry
     15   %0 = tail call float @llvm.sqrt.f32(float %a) nounwind readnone
     16   br label %test_sqrt.exit
     17 
     18 test_sqrt.exit:                                   ; preds = %cond.else.i, %entry
     19   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
     20   store float %cond.i, float addrspace(1)* %out, align 4
     21   ret void
     22 }
     23 
     24 
     25 ; CHECK-LABEL: @fma_test(
     26 ; CHECK: select
     27 define void @fma_test(float addrspace(1)* noalias nocapture %out, float %a, float %b, float %c) nounwind {
     28 entry:
     29   %cmp.i = fcmp olt float %a, 0.000000e+00
     30   br i1 %cmp.i, label %test_fma.exit, label %cond.else.i
     31 
     32 cond.else.i:                                      ; preds = %entry
     33   %0 = tail call float @llvm.fma.f32(float %a, float %b, float %c) nounwind readnone
     34   br label %test_fma.exit
     35 
     36 test_fma.exit:                                   ; preds = %cond.else.i, %entry
     37   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
     38   store float %cond.i, float addrspace(1)* %out, align 4
     39   ret void
     40 }
     41 
     42 ; CHECK-LABEL: @fmuladd_test(
     43 ; CHECK: select
     44 define void @fmuladd_test(float addrspace(1)* noalias nocapture %out, float %a, float %b, float %c) nounwind {
     45 entry:
     46   %cmp.i = fcmp olt float %a, 0.000000e+00
     47   br i1 %cmp.i, label %test_fmuladd.exit, label %cond.else.i
     48 
     49 cond.else.i:                                      ; preds = %entry
     50   %0 = tail call float @llvm.fmuladd.f32(float %a, float %b, float %c) nounwind readnone
     51   br label %test_fmuladd.exit
     52 
     53 test_fmuladd.exit:                                   ; preds = %cond.else.i, %entry
     54   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
     55   store float %cond.i, float addrspace(1)* %out, align 4
     56   ret void
     57 }
     58 
     59