35 lines
		
	
	
		
			776 B
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			776 B
		
	
	
	
		
			LLVM
		
	
	
	
| ; RUN: llc -mtriple=x86_64-linux-gnu %s -o - -verify-machineinstrs | FileCheck %s
 | |
| 
 | |
| define i32 @tail_merge_unreachable(i32 %i) {
 | |
| entry:
 | |
|   br i1 undef, label %sw, label %end
 | |
| sw:
 | |
|   switch i32 %i, label %end [
 | |
|     i32 99,  label %sw.bb
 | |
|     i32 98,  label %sw.bb
 | |
|     i32 101, label %sw.bb
 | |
|     i32 97,  label %sw.bb2
 | |
|     i32 96,  label %sw.bb2
 | |
|     i32 100, label %sw.bb2
 | |
|   ]
 | |
| sw.bb:
 | |
|   unreachable
 | |
| sw.bb2:
 | |
|   unreachable
 | |
| end:
 | |
|   %p = phi i32 [ 1, %sw ], [ 0, %entry ]
 | |
|   ret i32 %p
 | |
| 
 | |
| ; CHECK-LABEL: tail_merge_unreachable:
 | |
| ; Range Check
 | |
| ; CHECK: addl $-96
 | |
| ; CHECK: cmpl $5
 | |
| ; CHECK: jbe [[JUMP_TABLE_BLOCK:[.][A-Za-z0-9_]+]]
 | |
| ; CHECK: retq
 | |
| ; CHECK: [[JUMP_TABLE_BLOCK]]:
 | |
| ; CHECK: btl
 | |
| ; CHECK: jae [[UNREACHABLE_BLOCK:[.][A-Za-z0-9_]+]]
 | |
| ; CHECK [[UNREACHABLE_BLOCK]]:
 | |
| ; CHECK: .Lfunc_end0
 | |
| }
 |