56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 | |
| ; RUN: opt -S -structurizecfg %s -o - | FileCheck %s
 | |
| 
 | |
| define void @test(i1 %b1, i1 %b2, i1 %b3, i1 %b4) {
 | |
| ; CHECK-LABEL: @test(
 | |
| ; CHECK-NEXT:  A:
 | |
| ; CHECK-NEXT:    [[B2_INV:%.*]] = xor i1 [[B2:%.*]], true
 | |
| ; CHECK-NEXT:    br i1 [[B1:%.*]], label [[B:%.*]], label [[H:%.*]]
 | |
| ; CHECK:       B:
 | |
| ; CHECK-NEXT:    br label [[C:%.*]]
 | |
| ; CHECK:       C:
 | |
| ; CHECK-NEXT:    br i1 [[B2_INV]], label [[E:%.*]], label [[FLOW:%.*]]
 | |
| ; CHECK:       Flow:
 | |
| ; CHECK-NEXT:    [[TMP0:%.*]] = phi i1 [ [[B3:%.*]], [[E]] ], [ true, [[C]] ]
 | |
| ; CHECK-NEXT:    [[TMP1:%.*]] = phi i1 [ false, [[E]] ], [ true, [[C]] ]
 | |
| ; CHECK-NEXT:    br i1 [[TMP0]], label [[FLOW1:%.*]], label [[C]]
 | |
| ; CHECK:       Flow1:
 | |
| ; CHECK-NEXT:    br i1 [[TMP1]], label [[D:%.*]], label [[F:%.*]]
 | |
| ; CHECK:       D:
 | |
| ; CHECK-NEXT:    br label [[F]]
 | |
| ; CHECK:       E:
 | |
| ; CHECK-NEXT:    br label [[FLOW]]
 | |
| ; CHECK:       F:
 | |
| ; CHECK-NEXT:    br label [[G:%.*]]
 | |
| ; CHECK:       G:
 | |
| ; CHECK-NEXT:    br i1 [[B4:%.*]], label [[FLOW2:%.*]], label [[B]]
 | |
| ; CHECK:       Flow2:
 | |
| ; CHECK-NEXT:    br label [[H]]
 | |
| ; CHECK:       H:
 | |
| ; CHECK-NEXT:    ret void
 | |
| ;
 | |
| A:
 | |
|   br i1 %b1, label %B, label %H
 | |
| 
 | |
| B:
 | |
|   br label %C
 | |
| 
 | |
| C:
 | |
|   br i1 %b2, label %D, label %E
 | |
| 
 | |
| D:
 | |
|   br label %F
 | |
| 
 | |
| E:
 | |
|   br i1 %b3, label %F, label %C
 | |
| 
 | |
| F:
 | |
|   br label %G
 | |
| 
 | |
| G:
 | |
|   br i1 %b4, label %H, label %B
 | |
| 
 | |
| H:
 | |
|   ret void
 | |
| }
 |