64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			LLVM
		
	
	
	
; RUN: llc -O0 -stop-after=irtranslator -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s
 | 
						|
; REQUIRES: global-isel
 | 
						|
; This file checks that the translation from llvm IR to generic MachineInstr
 | 
						|
; is correct.
 | 
						|
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
 | 
						|
target triple = "aarch64-apple-ios"
 | 
						|
 | 
						|
; Tests for add.
 | 
						|
; CHECK: name: addi64
 | 
						|
; CHECK: [[ARG1:%[0-9]+]](64) = COPY %x0
 | 
						|
; CHECK-NEXT: [[ARG2:%[0-9]+]](64) = COPY %x1
 | 
						|
; CHECK-NEXT: [[RES:%[0-9]+]](64) = G_ADD i64 [[ARG1]], [[ARG2]]
 | 
						|
; CHECK-NEXT: %x0 = COPY [[RES]]
 | 
						|
; CHECK-NEXT: RET_ReallyLR implicit %x0 
 | 
						|
define i64 @addi64(i64 %arg1, i64 %arg2) {
 | 
						|
  %res = add i64 %arg1, %arg2
 | 
						|
  ret i64 %res
 | 
						|
}
 | 
						|
 | 
						|
; Tests for br.
 | 
						|
; CHECK: name: uncondbr
 | 
						|
; CHECK: body:
 | 
						|
;
 | 
						|
; Entry basic block.
 | 
						|
; CHECK: {{[0-9a-zA-Z._-]+}}:
 | 
						|
;
 | 
						|
; Make sure we have one successor and only one.
 | 
						|
; CHECK-NEXT: successors: %[[END:[0-9a-zA-Z._-]+]]({{0x[a-f0-9]+ / 0x[a-f0-9]+}} = 100.00%)
 | 
						|
;
 | 
						|
; Check that we emit the correct branch.
 | 
						|
; CHECK: G_BR label %[[END]]
 | 
						|
;
 | 
						|
; Check that end contains the return instruction.
 | 
						|
; CHECK: [[END]]:
 | 
						|
; CHECK-NEXT: RET_ReallyLR
 | 
						|
define void @uncondbr() {
 | 
						|
  br label %end
 | 
						|
end:
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; Tests for or.
 | 
						|
; CHECK: name: ori64
 | 
						|
; CHECK: [[ARG1:%[0-9]+]](64) = COPY %x0
 | 
						|
; CHECK-NEXT: [[ARG2:%[0-9]+]](64) = COPY %x1
 | 
						|
; CHECK-NEXT: [[RES:%[0-9]+]](64) = G_OR i64 [[ARG1]], [[ARG2]]
 | 
						|
; CHECK-NEXT: %x0 = COPY [[RES]]
 | 
						|
; CHECK-NEXT: RET_ReallyLR implicit %x0
 | 
						|
define i64 @ori64(i64 %arg1, i64 %arg2) {
 | 
						|
  %res = or i64 %arg1, %arg2
 | 
						|
  ret i64 %res
 | 
						|
}
 | 
						|
 | 
						|
; CHECK: name: ori32
 | 
						|
; CHECK: [[ARG1:%[0-9]+]](32) = COPY %w0
 | 
						|
; CHECK-NEXT: [[ARG2:%[0-9]+]](32) = COPY %w1
 | 
						|
; CHECK-NEXT: [[RES:%[0-9]+]](32) = G_OR i32 [[ARG1]], [[ARG2]]
 | 
						|
; CHECK-NEXT: %w0 = COPY [[RES]]
 | 
						|
; CHECK-NEXT: RET_ReallyLR implicit %w0
 | 
						|
define i32 @ori32(i32 %arg1, i32 %arg2) {
 | 
						|
  %res = or i32 %arg1, %arg2
 | 
						|
  ret i32 %res
 | 
						|
}
 |