39 lines
		
	
	
		
			848 B
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			848 B
		
	
	
	
		
			LLVM
		
	
	
	
; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s
 | 
						|
 | 
						|
; CHECK: shift_parts_left_128
 | 
						|
define void @shift_parts_left_128(i128* %val, i128* %amtptr) {
 | 
						|
; CHECK: shl.b64
 | 
						|
; CHECK: mov.u32
 | 
						|
; CHECK: sub.s32
 | 
						|
; CHECK: shr.u64
 | 
						|
; CHECK: or.b64
 | 
						|
; CHECK: add.s32
 | 
						|
; CHECK: shl.b64
 | 
						|
; CHECK: setp.gt.s32
 | 
						|
; CHECK: selp.b64
 | 
						|
; CHECK: shl.b64
 | 
						|
  %amt = load i128, i128* %amtptr
 | 
						|
  %a = load i128, i128* %val
 | 
						|
  %val0 = shl i128 %a, %amt
 | 
						|
  store i128 %val0, i128* %val
 | 
						|
  ret void
 | 
						|
}
 | 
						|
 | 
						|
; CHECK: shift_parts_right_128
 | 
						|
define void @shift_parts_right_128(i128* %val, i128* %amtptr) {
 | 
						|
; CHECK: shr.u64
 | 
						|
; CHECK: sub.s32
 | 
						|
; CHECK: shl.b64
 | 
						|
; CHECK: or.b64
 | 
						|
; CHECK: add.s32
 | 
						|
; CHECK: shr.s64
 | 
						|
; CHECK: setp.gt.s32
 | 
						|
; CHECK: selp.b64
 | 
						|
; CHECK: shr.s64
 | 
						|
  %amt = load i128, i128* %amtptr
 | 
						|
  %a = load i128, i128* %val
 | 
						|
  %val0 = ashr i128 %a, %amt
 | 
						|
  store i128 %val0, i128* %val
 | 
						|
  ret void
 | 
						|
}
 |