1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -instsimplify -S | FileCheck %s 3 4; Test all integer predicates with bool types and true/false constants. 5; Use vectors to provide test coverage that is not duplicated in other folds. 6 7define <2 x i1> @eq_t(<2 x i1> %a) { 8; CHECK-LABEL: @eq_t( 9; CHECK-NEXT: ret <2 x i1> %a 10; 11 %r = icmp eq <2 x i1> %a, <i1 true, i1 true> 12 ret <2 x i1> %r 13} 14 15define <2 x i1> @eq_t_undef_elt(<2 x i1> %a) { 16; CHECK-LABEL: @eq_t_undef_elt( 17; CHECK-NEXT: ret <2 x i1> [[A:%.*]] 18; 19 %r = icmp eq <2 x i1> %a, <i1 undef, i1 true> 20 ret <2 x i1> %r 21} 22 23define <2 x i1> @eq_f(<2 x i1> %a) { 24; CHECK-LABEL: @eq_f( 25; CHECK-NEXT: [[R:%.*]] = icmp eq <2 x i1> %a, zeroinitializer 26; CHECK-NEXT: ret <2 x i1> [[R]] 27; 28 %r = icmp eq <2 x i1> %a, <i1 false, i1 false> 29 ret <2 x i1> %r 30} 31 32define <2 x i1> @ne_t(<2 x i1> %a) { 33; CHECK-LABEL: @ne_t( 34; CHECK-NEXT: [[R:%.*]] = icmp ne <2 x i1> %a, <i1 true, i1 true> 35; CHECK-NEXT: ret <2 x i1> [[R]] 36; 37 %r = icmp ne <2 x i1> %a, <i1 true, i1 true> 38 ret <2 x i1> %r 39} 40 41define <2 x i1> @ne_f(<2 x i1> %a) { 42; CHECK-LABEL: @ne_f( 43; CHECK-NEXT: ret <2 x i1> %a 44; 45 %r = icmp ne <2 x i1> %a, <i1 false, i1 false> 46 ret <2 x i1> %r 47} 48 49define <2 x i1> @ugt_t(<2 x i1> %a) { 50; CHECK-LABEL: @ugt_t( 51; CHECK-NEXT: ret <2 x i1> zeroinitializer 52; 53 %r = icmp ugt <2 x i1> %a, <i1 true, i1 true> 54 ret <2 x i1> %r 55} 56 57define <2 x i1> @ugt_t_undef_elt(<2 x i1> %a) { 58; CHECK-LABEL: @ugt_t_undef_elt( 59; CHECK-NEXT: ret <2 x i1> zeroinitializer 60; 61 %r = icmp ugt <2 x i1> %a, <i1 true, i1 undef> 62 ret <2 x i1> %r 63} 64 65define <2 x i1> @ugt_f(<2 x i1> %a) { 66; CHECK-LABEL: @ugt_f( 67; CHECK-NEXT: ret <2 x i1> %a 68; 69 %r = icmp ugt <2 x i1> %a, <i1 false, i1 false> 70 ret <2 x i1> %r 71} 72 73define <2 x i1> @ult_t(<2 x i1> %a) { 74; CHECK-LABEL: @ult_t( 75; CHECK-NEXT: [[R:%.*]] = icmp ult <2 x i1> %a, <i1 true, i1 true> 76; CHECK-NEXT: ret <2 x i1> [[R]] 77; 78 %r = icmp ult <2 x i1> %a, <i1 true, i1 true> 79 ret <2 x i1> %r 80} 81 82define <2 x i1> @ult_f(<2 x i1> %a) { 83; CHECK-LABEL: @ult_f( 84; CHECK-NEXT: ret <2 x i1> zeroinitializer 85; 86 %r = icmp ult <2 x i1> %a, <i1 false, i1 false> 87 ret <2 x i1> %r 88} 89 90define <2 x i1> @sgt_t(<2 x i1> %a) { 91; CHECK-LABEL: @sgt_t( 92; CHECK-NEXT: [[R:%.*]] = icmp sgt <2 x i1> %a, <i1 true, i1 true> 93; CHECK-NEXT: ret <2 x i1> [[R]] 94; 95 %r = icmp sgt <2 x i1> %a, <i1 true, i1 true> 96 ret <2 x i1> %r 97} 98 99define <2 x i1> @sgt_f(<2 x i1> %a) { 100; CHECK-LABEL: @sgt_f( 101; CHECK-NEXT: ret <2 x i1> zeroinitializer 102; 103 %r = icmp sgt <2 x i1> %a, <i1 false, i1 false> 104 ret <2 x i1> %r 105} 106 107define <2 x i1> @slt_t(<2 x i1> %a) { 108; CHECK-LABEL: @slt_t( 109; CHECK-NEXT: ret <2 x i1> zeroinitializer 110; 111 %r = icmp slt <2 x i1> %a, <i1 true, i1 true> 112 ret <2 x i1> %r 113} 114 115define <2 x i1> @slt_f(<2 x i1> %a) { 116; CHECK-LABEL: @slt_f( 117; CHECK-NEXT: ret <2 x i1> %a 118; 119 %r = icmp slt <2 x i1> %a, <i1 false, i1 false> 120 ret <2 x i1> %r 121} 122 123define <2 x i1> @uge_t(<2 x i1> %a) { 124; CHECK-LABEL: @uge_t( 125; CHECK-NEXT: ret <2 x i1> %a 126; 127 %r = icmp uge <2 x i1> %a, <i1 true, i1 true> 128 ret <2 x i1> %r 129} 130 131define <2 x i1> @uge_f(<2 x i1> %a) { 132; CHECK-LABEL: @uge_f( 133; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true> 134; 135 %r = icmp uge <2 x i1> %a, <i1 false, i1 false> 136 ret <2 x i1> %r 137} 138 139define <2 x i1> @ule_t(<2 x i1> %a) { 140; CHECK-LABEL: @ule_t( 141; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true> 142; 143 %r = icmp ule <2 x i1> %a, <i1 true, i1 true> 144 ret <2 x i1> %r 145} 146 147define <2 x i1> @ule_f(<2 x i1> %a) { 148; CHECK-LABEL: @ule_f( 149; CHECK-NEXT: [[R:%.*]] = icmp ule <2 x i1> %a, zeroinitializer 150; CHECK-NEXT: ret <2 x i1> [[R]] 151; 152 %r = icmp ule <2 x i1> %a, <i1 false, i1 false> 153 ret <2 x i1> %r 154} 155 156define <2 x i1> @sge_t(<2 x i1> %a) { 157; CHECK-LABEL: @sge_t( 158; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true> 159; 160 %r = icmp sge <2 x i1> %a, <i1 true, i1 true> 161 ret <2 x i1> %r 162} 163 164define <2 x i1> @sge_t_undef_elt(<2 x i1> %a) { 165; CHECK-LABEL: @sge_t_undef_elt( 166; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true> 167; 168 %r = icmp sge <2 x i1> %a, <i1 true, i1 undef> 169 ret <2 x i1> %r 170} 171 172define <2 x i1> @sge_f(<2 x i1> %a) { 173; CHECK-LABEL: @sge_f( 174; CHECK-NEXT: [[R:%.*]] = icmp sge <2 x i1> %a, zeroinitializer 175; CHECK-NEXT: ret <2 x i1> [[R]] 176; 177 %r = icmp sge <2 x i1> %a, <i1 false, i1 false> 178 ret <2 x i1> %r 179} 180 181define <2 x i1> @sle_t(<2 x i1> %a) { 182; CHECK-LABEL: @sle_t( 183; CHECK-NEXT: ret <2 x i1> %a 184; 185 %r = icmp sle <2 x i1> %a, <i1 true, i1 true> 186 ret <2 x i1> %r 187} 188 189define <2 x i1> @sle_f(<2 x i1> %a) { 190; CHECK-LABEL: @sle_f( 191; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true> 192; 193 %r = icmp sle <2 x i1> %a, <i1 false, i1 false> 194 ret <2 x i1> %r 195} 196 197