37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ;; This test verifies that basic-block-sections works with address-taken basic blocks.
 | |
| ; RUN: llc < %s -mtriple=x86_64 -basic-block-sections=all | FileCheck %s
 | |
| 
 | |
| define void @foo(i1 zeroext %0) nounwind {
 | |
| entry:
 | |
|   %1 = select i1 %0, i8* blockaddress(@foo, %bb1), i8* blockaddress(@foo, %bb2) ; <i8*> [#uses=1]
 | |
|   indirectbr i8* %1, [label %bb1, label %bb2]
 | |
| 
 | |
| ; CHECK:         .text
 | |
| ; CHECK:         .section .text.foo,"ax",@progbits
 | |
| ; CHECK-LABEL: foo:
 | |
| ; CHECK:         movl    $.Ltmp0, %eax
 | |
| ; CHECK-NEXT:    movl    $.Ltmp1, %ecx
 | |
| ; CHECK-NEXT:    cmovneq %rax, %rcx
 | |
| ; CHECK-NEXT:    jmpq    *%rcx
 | |
| 
 | |
| bb1:                                                ; preds = %entry
 | |
|   %2 = call i32 @bar()
 | |
|   ret void
 | |
| ; CHECK:         .section .text.foo,"ax",@progbits,unique,1
 | |
| ; CHECK-NEXT:  .Ltmp0:
 | |
| ; CHECK-NEXT:  foo.__part.1
 | |
| ; CHECK-NEXT:    callq   bar
 | |
| ;
 | |
| 
 | |
| bb2:                                                ; preds = %entry
 | |
|   %3 = call i32 @baz()
 | |
|   ret void
 | |
| ; CHECK:         .section .text.foo,"ax",@progbits,unique,2
 | |
| ; CHECK-NEXT:  .Ltmp1:
 | |
| ; CHECK-NEXT:  foo.__part.2
 | |
| ; CHECK-NEXT:    callq   baz
 | |
| }
 | |
| 
 | |
| declare i32 @bar()
 | |
| declare i32 @baz()
 |