forked from OSchip/llvm-project
				
			[InstSimplify] add tests for cttz constant range; NFC
This is a search-and-replace of f6cb7f3
			
			
This commit is contained in:
		
							parent
							
								
									9bcb437f46
								
							
						
					
					
						commit
						0351bd959f
					
				| 
						 | 
				
			
			@ -2267,4 +2267,111 @@ define <2 x i1> @ctlz_slt_bitwidth_splat(<2 x i13> %x) {
 | 
			
		|||
  ret <2 x i1> %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare i11 @llvm.cttz.i11(i11)
 | 
			
		||||
declare i73 @llvm.cttz.i73(i73)
 | 
			
		||||
declare <2 x i13> @llvm.cttz.v2i13(<2 x i13>)
 | 
			
		||||
 | 
			
		||||
define i1 @cttz_sgt_bitwidth(i11 %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_sgt_bitwidth(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call i11 @llvm.cttz.i11(i11 [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i11 [[POP]], 11
 | 
			
		||||
; CHECK-NEXT:    ret i1 [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call i11 @llvm.cttz.i11(i11 %x)
 | 
			
		||||
  %cmp = icmp sgt i11 %pop, 11
 | 
			
		||||
  ret i1 %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define i1 @cttz_sle_minus1(i11 %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_sle_minus1(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call i11 @llvm.cttz.i11(i11 [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i11 [[POP]], -1
 | 
			
		||||
; CHECK-NEXT:    ret i1 [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call i11 @llvm.cttz.i11(i11 %x)
 | 
			
		||||
  %cmp = icmp sle i11 %pop, -1
 | 
			
		||||
  ret i1 %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define i1 @cttz_ugt_bitwidth(i73 %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_ugt_bitwidth(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call i73 @llvm.cttz.i73(i73 [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i73 [[POP]], 73
 | 
			
		||||
; CHECK-NEXT:    ret i1 [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call i73 @llvm.cttz.i73(i73 %x)
 | 
			
		||||
  %cmp = icmp ugt i73 %pop, 73
 | 
			
		||||
  ret i1 %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; Negative test - does not simplify, but instcombine could reduce this.
 | 
			
		||||
 | 
			
		||||
define i1 @cttz_ugt_bitwidth_minus1(i73 %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_ugt_bitwidth_minus1(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call i73 @llvm.cttz.i73(i73 [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i73 [[POP]], 72
 | 
			
		||||
; CHECK-NEXT:    ret i1 [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call i73 @llvm.cttz.i73(i73 %x)
 | 
			
		||||
  %cmp = icmp ugt i73 %pop, 72
 | 
			
		||||
  ret i1 %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define <2 x i1> @cttz_sgt_bitwidth_splat(<2 x i13> %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_sgt_bitwidth_splat(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt <2 x i13> [[POP]], <i13 13, i13 13>
 | 
			
		||||
; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> %x)
 | 
			
		||||
  %cmp = icmp sgt <2 x i13> %pop, <i13 13, i13 13>
 | 
			
		||||
  ret <2 x i1> %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define i1 @cttz_ult_plus1_bitwidth(i11 %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_ult_plus1_bitwidth(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call i11 @llvm.cttz.i11(i11 [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i11 [[POP]], 12
 | 
			
		||||
; CHECK-NEXT:    ret i1 [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call i11 @llvm.cttz.i11(i11 %x)
 | 
			
		||||
  %cmp = icmp ult i11 %pop, 12
 | 
			
		||||
  ret i1 %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define i1 @cttz_ne_big_bitwidth(i73 %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_ne_big_bitwidth(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call i73 @llvm.cttz.i73(i73 [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i73 [[POP]], 75
 | 
			
		||||
; CHECK-NEXT:    ret i1 [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call i73 @llvm.cttz.i73(i73 %x)
 | 
			
		||||
  %cmp = icmp ne i73 %pop, 75
 | 
			
		||||
  ret i1 %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define <2 x i1> @cttz_slt_bitwidth_plus1_splat(<2 x i13> %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_slt_bitwidth_plus1_splat(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp slt <2 x i13> [[POP]], <i13 14, i13 14>
 | 
			
		||||
; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> %x)
 | 
			
		||||
  %cmp = icmp slt <2 x i13> %pop, <i13 14, i13 14>
 | 
			
		||||
  ret <2 x i1> %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
; Negative test - does not simplify, but instcombine could reduce this.
 | 
			
		||||
 | 
			
		||||
define <2 x i1> @cttz_slt_bitwidth_splat(<2 x i13> %x) {
 | 
			
		||||
; CHECK-LABEL: @cttz_slt_bitwidth_splat(
 | 
			
		||||
; CHECK-NEXT:    [[POP:%.*]] = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> [[X:%.*]], i1 false)
 | 
			
		||||
; CHECK-NEXT:    [[CMP:%.*]] = icmp slt <2 x i13> [[POP]], <i13 13, i13 13>
 | 
			
		||||
; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 | 
			
		||||
;
 | 
			
		||||
  %pop = call <2 x i13> @llvm.cttz.v2i13(<2 x i13> %x)
 | 
			
		||||
  %cmp = icmp slt <2 x i13> %pop, <i13 13, i13 13>
 | 
			
		||||
  ret <2 x i1> %cmp
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
attributes #0 = { null_pointer_is_valid }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue