Home | History | Annotate | Download | only in CallSiteSplitting
      1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
      2 ; RUN: opt -S -callsite-splitting -simplifycfg < %s | FileCheck %s
      3 
      4 define i16 @test1() {
      5 ; CHECK-LABEL: @test1(
      6 ; CHECK-NEXT:  entry:
      7 ; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 undef, i16 1, i16 0
      8 ; CHECK-NEXT:    call void @callee(i16 0)
      9 ; CHECK-NEXT:    br label [[FOR_COND12:%.*]]
     10 ; CHECK:       for.cond12:
     11 ; CHECK-NEXT:    call void @callee(i16 [[SPEC_SELECT]])
     12 ; CHECK-NEXT:    br label [[FOR_COND12]]
     13 ;
     14 entry:
     15   %spec.select = select i1 undef, i16 1, i16 0
     16   %tobool18 = icmp ne i16 %spec.select, 0
     17   br i1 %tobool18, label %for.cond12.us, label %for.cond12
     18 
     19 for.cond12.us:
     20   unreachable
     21 
     22 for.cond12:
     23   call void @callee(i16 %spec.select)
     24   br label %for.cond12
     25 }
     26 
     27 define i16 @test2() {
     28 ; CHECK-LABEL: @test2(
     29 ; CHECK-NEXT:  entry:
     30 ; CHECK-NEXT:    [[S:%.*]] = select i1 undef, i16 1, i16 0
     31 ; CHECK-NEXT:    call void @callee(i16 0)
     32 ; CHECK-NEXT:    br label [[FOR_COND12:%.*]]
     33 ; CHECK:       for.cond12:
     34 ; CHECK-NEXT:    [[ADD:%.*]] = add i16 [[S]], 10
     35 ; CHECK-NEXT:    [[ADD2:%.*]] = add i16 [[S]], 10
     36 ; CHECK-NEXT:    call void @callee(i16 [[S]])
     37 ; CHECK-NEXT:    br label [[FOR_COND12]]
     38 ;
     39 entry:
     40   %s= select i1 undef, i16 1, i16 0
     41   %tobool18 = icmp ne i16 %s, 0
     42   br i1 %tobool18, label %for.cond12.us, label %for.cond12
     43 
     44 for.cond12.us:
     45   unreachable
     46 
     47 for.cond12:
     48   call void @callee(i16 %s)
     49   %add = add i16 %s, 10
     50   %add2 = add i16 %s, 10
     51   br label %for.cond12
     52 }
     53 
     54 define i16 @test3() {
     55 ; CHECK-LABEL: @test3(
     56 ; CHECK-NEXT:  entry:
     57 ; CHECK-NEXT:    [[S:%.*]] = select i1 undef, i16 1, i16 0
     58 ; CHECK-NEXT:    call void @callee(i16 0)
     59 ; CHECK-NEXT:    br label [[FOR_COND12:%.*]]
     60 ; CHECK:       for.cond12:
     61 ; CHECK-NEXT:    [[ADD:%.*]] = add i16 [[S]], 10
     62 ; CHECK-NEXT:    [[ADD2:%.*]] = add i16 [[ADD]], 10
     63 ; CHECK-NEXT:    br i1 undef, label [[FOR_COND12_SPLIT:%.*]], label [[EXIT:%.*]]
     64 ; CHECK:       for.cond12.split:
     65 ; CHECK-NEXT:    call void @callee(i16 [[S]])
     66 ; CHECK-NEXT:    br label [[FOR_COND12]]
     67 ; CHECK:       exit:
     68 ; CHECK-NEXT:    ret i16 [[ADD2]]
     69 ;
     70 entry:
     71   %s= select i1 undef, i16 1, i16 0
     72   %tobool18 = icmp ne i16 %s, 0
     73   br i1 %tobool18, label %for.cond12.us, label %for.cond12
     74 
     75 for.cond12.us:
     76   unreachable
     77 
     78 for.cond12:
     79   call void @callee(i16 %s)
     80   %add = add i16 %s, 10
     81   %add2 = add i16 %add, 10
     82   br i1 undef, label %for.cond12, label %exit
     83 
     84 exit:
     85   ret i16 %add2
     86 }
     87 
     88 define internal void @callee(i16 %flag) {
     89   ret void
     90 }
     91