Home | History | Annotate | Download | only in Hexagon
      1 ; RUN: llc -march=hexagon -mcpu=hexagonv5 -hexagon-eif=0 -print-machineinstrs=if-converter %s -o /dev/null 2>&1 | FileCheck %s
      2 ; Check that the edge weights are updated correctly after if-conversion.
      3 
      4 ; CHECK: BB#3:
      5 ; CHECK: Successors according to CFG: BB#2({{[0-9a-fx/= ]+}}10.00%) BB#1({{[0-9a-fx/= ]+}}90.00%)
      6 @a = external global i32
      7 @d = external global i32
      8 
      9 ; In the following CFG, A,B,C,D will be if-converted into a single block.
     10 ; Check if the edge weights on edges to E and F are maintained correctly.
     11 ;
     12 ;    A
     13 ;   / \
     14 ;  B   C
     15 ;   \ /
     16 ;    D
     17 ;   / \
     18 ;  E   F
     19 ;
     20 define void @test1(i8 zeroext %la, i8 zeroext %lb) {
     21 entry:
     22   %cmp0 = call i1 @pred()
     23   br i1 %cmp0, label %if.else2, label %if.then0, !prof !1
     24 
     25 if.else2:
     26   call void @bar(i32 2)
     27   br label %if.end2
     28 
     29 if.end2:
     30   call void @foo(i32 2)
     31   br label %return
     32 
     33 if.end:
     34   %storemerge = phi i32 [ %and, %if.else ], [ %shl, %if.then ]
     35   store i32 %storemerge, i32* @a, align 4
     36   %0 = load i32, i32* @d, align 4
     37   %cmp2 = call i1 @pred()
     38   br i1 %cmp2, label %if.end2, label %if.else2, !prof !2
     39 
     40 if.then0:
     41   %cmp = icmp eq i8 %la, %lb
     42   br i1 %cmp, label %if.then, label %if.else, !prof !1
     43 
     44 if.then:
     45   %conv1 = zext i8 %la to i32
     46   %shl = shl nuw nsw i32 %conv1, 16
     47   br label %if.end
     48 
     49 if.else:
     50   %and8 = and i8 %lb, %la
     51   %and = zext i8 %and8 to i32
     52   br label %if.end
     53 
     54 return:
     55   call void @foo(i32 2)
     56   ret void
     57 }
     58 
     59 declare void @foo(i32)
     60 declare void @bar(i32)
     61 declare i1 @pred()
     62 
     63 !1 = !{!"branch_weights", i32 80, i32 20}
     64 !2 = !{!"branch_weights", i32 10, i32 90}
     65