Skip to content

Commit 9c928d0

Browse files
committed
[InstCombine] Add tests for reassoc of and/or of fcmps (NFC)
1 parent 3169a38 commit 9c928d0

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

llvm/test/Transforms/InstCombine/and-fcmp.ll

+60
Original file line numberDiff line numberDiff line change
@@ -5042,6 +5042,66 @@ define i1 @isnormal_logical_select_0_fmf1(half %x) {
50425042
ret i1 %and
50435043
}
50445044

5045+
define i1 @and_fcmp_reassoc1(i1 %x, double %a, double %b) {
5046+
; CHECK-LABEL: @and_fcmp_reassoc1(
5047+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
5048+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double [[A]], [[B]]
5049+
; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[TMP1]], [[X:%.*]]
5050+
; CHECK-NEXT: [[RETVAL1:%.*]] = and i1 [[RETVAL]], [[CMP1]]
5051+
; CHECK-NEXT: ret i1 [[RETVAL1]]
5052+
;
5053+
%cmp = fcmp ult double %a, %b
5054+
%cmp1 = fcmp ugt double %a, %b
5055+
%and = and i1 %cmp, %x
5056+
%retval = and i1 %and, %cmp1
5057+
ret i1 %retval
5058+
}
5059+
5060+
define i1 @and_fcmp_reassoc2(i1 %x, double %a, double %b) {
5061+
; CHECK-LABEL: @and_fcmp_reassoc2(
5062+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
5063+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double [[A]], [[B]]
5064+
; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[X:%.*]], [[TMP1]]
5065+
; CHECK-NEXT: [[RETVAL1:%.*]] = and i1 [[RETVAL]], [[CMP1]]
5066+
; CHECK-NEXT: ret i1 [[RETVAL1]]
5067+
;
5068+
%cmp = fcmp ult double %a, %b
5069+
%cmp1 = fcmp ugt double %a, %b
5070+
%and = and i1 %x, %cmp
5071+
%retval = and i1 %and, %cmp1
5072+
ret i1 %retval
5073+
}
5074+
5075+
define i1 @and_fcmp_reassoc3(i1 %x, double %a, double %b) {
5076+
; CHECK-LABEL: @and_fcmp_reassoc3(
5077+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
5078+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double [[A]], [[B]]
5079+
; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[TMP1]], [[X:%.*]]
5080+
; CHECK-NEXT: [[RETVAL1:%.*]] = and i1 [[CMP1]], [[RETVAL]]
5081+
; CHECK-NEXT: ret i1 [[RETVAL1]]
5082+
;
5083+
%cmp = fcmp ult double %a, %b
5084+
%cmp1 = fcmp ugt double %a, %b
5085+
%and = and i1 %cmp, %x
5086+
%retval = and i1 %cmp1, %and
5087+
ret i1 %retval
5088+
}
5089+
5090+
define i1 @and_fcmp_reassoc4(i1 %x, double %a, double %b) {
5091+
; CHECK-LABEL: @and_fcmp_reassoc4(
5092+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double [[A:%.*]], [[B:%.*]]
5093+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double [[A]], [[B]]
5094+
; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[X:%.*]], [[TMP1]]
5095+
; CHECK-NEXT: [[RETVAL1:%.*]] = and i1 [[CMP1]], [[RETVAL]]
5096+
; CHECK-NEXT: ret i1 [[RETVAL1]]
5097+
;
5098+
%cmp = fcmp ult double %a, %b
5099+
%cmp1 = fcmp ugt double %a, %b
5100+
%and = and i1 %x, %cmp
5101+
%retval = and i1 %cmp1, %and
5102+
ret i1 %retval
5103+
}
5104+
50455105
declare half @llvm.fabs.f16(half)
50465106
declare <2 x half> @llvm.fabs.v2f16(<2 x half>)
50475107
declare half @llvm.copysign.f16(half, half)

llvm/test/Transforms/InstCombine/or-fcmp.ll

+60
Original file line numberDiff line numberDiff line change
@@ -4605,3 +4605,63 @@ define i1 @intersect_fmf_4(double %a, double %b) {
46054605
%retval = or i1 %cmp, %cmp1
46064606
ret i1 %retval
46074607
}
4608+
4609+
define i1 @or_fcmp_reassoc1(i1 %x, double %a, double %b) {
4610+
; CHECK-LABEL: @or_fcmp_reassoc1(
4611+
; CHECK-NEXT: [[OR:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
4612+
; CHECK-NEXT: [[CMP2:%.*]] = fcmp ogt double [[A]], [[B]]
4613+
; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[OR]], [[CMP1:%.*]]
4614+
; CHECK-NEXT: [[RETVAL1:%.*]] = or i1 [[RETVAL]], [[CMP2]]
4615+
; CHECK-NEXT: ret i1 [[RETVAL1]]
4616+
;
4617+
%cmp = fcmp olt double %a, %b
4618+
%cmp1 = fcmp ogt double %a, %b
4619+
%or = or i1 %cmp, %x
4620+
%retval = or i1 %or, %cmp1
4621+
ret i1 %retval
4622+
}
4623+
4624+
define i1 @or_fcmp_reassoc2(i1 %x, double %a, double %b) {
4625+
; CHECK-LABEL: @or_fcmp_reassoc2(
4626+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
4627+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double [[A]], [[B]]
4628+
; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[X:%.*]], [[TMP1]]
4629+
; CHECK-NEXT: [[RETVAL1:%.*]] = or i1 [[RETVAL]], [[CMP1]]
4630+
; CHECK-NEXT: ret i1 [[RETVAL1]]
4631+
;
4632+
%cmp = fcmp olt double %a, %b
4633+
%cmp1 = fcmp ogt double %a, %b
4634+
%or = or i1 %x, %cmp
4635+
%retval = or i1 %or, %cmp1
4636+
ret i1 %retval
4637+
}
4638+
4639+
define i1 @or_fcmp_reassoc3(i1 %x, double %a, double %b) {
4640+
; CHECK-LABEL: @or_fcmp_reassoc3(
4641+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
4642+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double [[A]], [[B]]
4643+
; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[TMP1]], [[X:%.*]]
4644+
; CHECK-NEXT: [[RETVAL1:%.*]] = or i1 [[CMP1]], [[RETVAL]]
4645+
; CHECK-NEXT: ret i1 [[RETVAL1]]
4646+
;
4647+
%cmp = fcmp olt double %a, %b
4648+
%cmp1 = fcmp ogt double %a, %b
4649+
%or = or i1 %cmp, %x
4650+
%retval = or i1 %cmp1, %or
4651+
ret i1 %retval
4652+
}
4653+
4654+
define i1 @or_fcmp_reassoc4(i1 %x, double %a, double %b) {
4655+
; CHECK-LABEL: @or_fcmp_reassoc4(
4656+
; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double [[A:%.*]], [[B:%.*]]
4657+
; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double [[A]], [[B]]
4658+
; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[X:%.*]], [[TMP1]]
4659+
; CHECK-NEXT: [[RETVAL1:%.*]] = or i1 [[CMP1]], [[RETVAL]]
4660+
; CHECK-NEXT: ret i1 [[RETVAL1]]
4661+
;
4662+
%cmp = fcmp olt double %a, %b
4663+
%cmp1 = fcmp ogt double %a, %b
4664+
%or = or i1 %x, %cmp
4665+
%retval = or i1 %cmp1, %or
4666+
ret i1 %retval
4667+
}

0 commit comments

Comments
 (0)