You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			159 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			159 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | # RUN: llc -march=mips64 -mcpu=mips64r6 -start-after=block-placement -o - %s | FileCheck %s | ||
|  | 
 | ||
|  | # Check that MipsHazardSchedule sees through basic blocks with transient instructions. | ||
|  | # The mir code in this file isn't representative of the llvm-ir. | ||
|  | 
 | ||
|  | --- | | ||
|  |   ; ModuleID = 'test.ll' | ||
|  |   source_filename = "test.c" | ||
|  |   target datalayout = "E-m:e-i8:8:32-i16:16:32-i64:64-n32:64-S128" | ||
|  |   target triple = "mips64-img-linux-gnu" | ||
|  | 
 | ||
|  |   ; Function Attrs: nounwind | ||
|  |   define i32 @f(i32 signext %a) { | ||
|  |   entry: | ||
|  |     %retval = alloca i32, align 4 | ||
|  |     %a.addr = alloca i32, align 4 | ||
|  |     store i32 %a, i32* %a.addr, align 4 | ||
|  |     %0 = load i32, i32* %a.addr, align 4 | ||
|  |     %cmp = icmp sgt i32 %0, 5 | ||
|  |     br i1 %cmp, label %if.then, label %if.else | ||
|  | 
 | ||
|  |   if.then:                                          ; preds = %entry | ||
|  |     %1 = load i32, i32* %a.addr, align 4 | ||
|  |     %2 = load i32, i32* %a.addr, align 4 | ||
|  |     %add = add nsw i32 %1, %2 | ||
|  |     store i32 %add, i32* %retval, align 4 | ||
|  |     br label %return | ||
|  | 
 | ||
|  |   if.else:                                          ; preds = %entry | ||
|  |     %3 = load i32, i32* %a.addr, align 4 | ||
|  |     %call = call i32 @g(i32 signext %3) | ||
|  |     store i32 %call, i32* %retval, align 4 | ||
|  |     br label %return | ||
|  | 
 | ||
|  |   return:                                           ; preds = %if.else, %if.then | ||
|  |     %4 = load i32, i32* %retval, align 4 | ||
|  |     ret i32 %4 | ||
|  |   } | ||
|  | 
 | ||
|  |   declare i32 @g(i32 signext) | ||
|  | 
 | ||
|  |   ; Function Attrs: nounwind | ||
|  |   declare void @llvm.stackprotector(i8*, i8**) | ||
|  | 
 | ||
|  |   !llvm.ident = !{!0} | ||
|  | 
 | ||
|  |   !0 = !{!"clang version 4.0.0 "} | ||
|  | 
 | ||
|  | ... | ||
|  | --- | ||
|  | # CHECK-LABEL: f: | ||
|  | # CHECK: bgtzc | ||
|  | # CHECK-NEXT: nop | ||
|  | # CHECK: bltzc | ||
|  | # CHECK-NEXT: nop | ||
|  | # CHECK: blezc | ||
|  | name:            f | ||
|  | alignment:       3 | ||
|  | exposesReturnsTwice: false | ||
|  | legalized:       false | ||
|  | regBankSelected: false | ||
|  | selected:        false | ||
|  | tracksRegLiveness: true | ||
|  | liveins: | ||
|  |   - { reg: '%a0_64' } | ||
|  |   - { reg: '%t9_64' } | ||
|  | calleeSavedRegisters: [ '%fp', '%gp', '%ra', '%d12', '%d13', '%d14', '%d15', | ||
|  |                         '%f24', '%f25', '%f26', '%f27', '%f28', '%f29', | ||
|  |                         '%f30', '%f31', '%fp_64', '%f_hi24', '%f_hi25', | ||
|  |                         '%f_hi26', '%f_hi27', '%f_hi28', '%f_hi29', '%f_hi30', | ||
|  |                         '%f_hi31', '%gp_64', '%ra_64', '%s0', '%s1', '%s2', | ||
|  |                         '%s3', '%s4', '%s5', '%s6', '%s7', '%d24_64', '%d25_64', | ||
|  |                         '%d26_64', '%d27_64', '%d28_64', '%d29_64', '%d30_64', | ||
|  |                         '%d31_64', '%s0_64', '%s1_64', '%s2_64', '%s3_64', | ||
|  |                         '%s4_64', '%s5_64', '%s6_64', '%s7_64' ] | ||
|  | frameInfo: | ||
|  |   isFrameAddressTaken: false | ||
|  |   isReturnAddressTaken: false | ||
|  |   hasStackMap:     false | ||
|  |   hasPatchPoint:   false | ||
|  |   stackSize:       32 | ||
|  |   offsetAdjustment: 0 | ||
|  |   maxAlignment:    8 | ||
|  |   adjustsStack:    true | ||
|  |   hasCalls:        true | ||
|  |   maxCallFrameSize: 0 | ||
|  |   hasOpaqueSPAdjustment: false | ||
|  |   hasVAStart:      false | ||
|  |   hasMustTailInVarArgFunc: false | ||
|  | stack: | ||
|  |   - { id: 0, name: retval, offset: -28, size: 4, alignment: 4 } | ||
|  |   - { id: 1, name: a.addr, offset: -32, size: 4, alignment: 4 } | ||
|  |   - { id: 2, type: spill-slot, offset: -8, size: 8, alignment: 8, callee-saved-register: '%ra_64' } | ||
|  |   - { id: 3, type: spill-slot, offset: -16, size: 8, alignment: 8, callee-saved-register: '%fp_64' } | ||
|  |   - { id: 4, type: spill-slot, offset: -24, size: 8, alignment: 8, callee-saved-register: '%gp_64' } | ||
|  | body:             | | ||
|  |   bb.0.entry: | ||
|  |     successors: %bb.1.if.then(0x40000000), %bb.5.if.else(0x40000000) | ||
|  |     liveins: %a0_64, %t9_64, %ra_64, %fp_64, %gp_64 | ||
|  | 
 | ||
|  |     %sp_64 = DADDiu %sp_64, -32 | ||
|  |     CFI_INSTRUCTION def_cfa_offset 32 | ||
|  |     SD killed %ra_64, %sp_64, 24 :: (store 8 into %stack.2) | ||
|  |     SD killed %fp_64, %sp_64, 16 :: (store 8 into %stack.3) | ||
|  |     SD killed %gp_64, %sp_64, 8 :: (store 8 into %stack.4) | ||
|  |     CFI_INSTRUCTION offset %ra_64, -8 | ||
|  |     CFI_INSTRUCTION offset %fp_64, -16 | ||
|  |     CFI_INSTRUCTION offset %gp_64, -24 | ||
|  |     CFI_INSTRUCTION def_cfa_register %fp_64 | ||
|  |     %at_64 = LUi64 @f | ||
|  |     %v0_64 = DADDu killed %at_64, %t9_64 | ||
|  |     SW %a0, %sp_64, 0 :: (store 4 into %ir.a.addr) | ||
|  |     BGTZC %a0, %bb.5.if.else, implicit-def %at | ||
|  | 
 | ||
|  |   bb.1.if.then: | ||
|  |     successors: %bb.6.return(0x40000000), %bb.2.if.then(0x40000000) | ||
|  |     liveins: %a0 | ||
|  | 
 | ||
|  |     BLTZC %a0, %bb.6.return, implicit-def %at | ||
|  | 
 | ||
|  |   bb.2.if.then: | ||
|  |     successors: %bb.3.if.else(0x80000000) | ||
|  |     %t8 = IMPLICIT_DEF | ||
|  | 
 | ||
|  |   bb.3.if.else: | ||
|  |     successors: %bb.6.return(0x40000000), %bb.4.if.else(0x40000000) | ||
|  |     liveins: %t8 | ||
|  | 
 | ||
|  |     BLEZC %t8, %bb.6.return, implicit-def %at | ||
|  | 
 | ||
|  |   bb.4.if.else: | ||
|  |     successors: %bb.6.return(0x80000000) | ||
|  |     liveins: %t8 | ||
|  | 
 | ||
|  |     %at = LW %sp_64, 0 :: (dereferenceable load 4 from %ir.a.addr) | ||
|  |     %at = ADDu killed %at, %t8 | ||
|  |     SW killed %at, %sp_64, 4 :: (store 4 into %ir.retval) | ||
|  |     J %bb.6.return, implicit-def dead %at | ||
|  | 
 | ||
|  |   bb.5.if.else: | ||
|  |     successors: %bb.6.return(0x80000000) | ||
|  |     liveins: %v0_64 | ||
|  | 
 | ||
|  |     %gp_64 = DADDiu killed %v0_64, @f | ||
|  |     %a0_64 = LW64 %sp_64, 0 :: (dereferenceable load 4 from %ir.a.addr) | ||
|  |     %t9_64 = LD %gp_64, @g :: (load 8 from call-entry @g) | ||
|  |     JALR64Pseudo %t9_64, csr_n64, implicit-def dead %ra, implicit %a0_64, implicit %gp_64, implicit-def %sp, implicit-def %v0 | ||
|  |     SW killed %v0, %sp_64, 4 :: (store 4 into %ir.retval) | ||
|  | 
 | ||
|  |   bb.6.return: | ||
|  |     %v0 = LW %sp_64, 4 :: (dereferenceable load 4 from %ir.retval) | ||
|  |     %gp_64 = LD %sp_64, 8 :: (load 8 from %stack.4) | ||
|  |     %fp_64 = LD %sp_64, 16 :: (load 8 from %stack.3) | ||
|  |     %ra_64 = LD %sp_64, 24 :: (load 8 from %stack.2) | ||
|  |     %sp_64 = DADDiu %sp_64, 32 | ||
|  |     PseudoReturn64 %ra_64 | ||
|  | 
 | ||
|  | ... |