brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.2 KiB · 8f83638 Raw
955 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt -passes='print<scalar-evolution>' < %s -disable-output 2>&1 | FileCheck %s3 4@constant = dso_local global i8 0, align 45@another_constant = dso_local global i8 0, align 46 7define i1 @binary_or.i1(i1 %x, i1 %y) {8; CHECK-LABEL: 'binary_or.i1'9; CHECK-NEXT:  Classifying expressions for: @binary_or.i110; CHECK-NEXT:    %r = or i1 %x, %y11; CHECK-NEXT:    --> (%x umax %y) U: full-set S: full-set12; CHECK-NEXT:  Determining loop execution counts for: @binary_or.i113;14  %r = or i1 %x, %y15  ret i1 %r16}17 18define i2 @binary_or.i2(i2 %x, i2 %y) {19; CHECK-LABEL: 'binary_or.i2'20; CHECK-NEXT:  Classifying expressions for: @binary_or.i221; CHECK-NEXT:    %r = or i2 %x, %y22; CHECK-NEXT:    --> %r U: full-set S: full-set23; CHECK-NEXT:  Determining loop execution counts for: @binary_or.i224;25  %r = or i2 %x, %y26  ret i2 %r27}28 29define i1 @binary_or.4ops.i1(i1 %x, i1 %y, i1 %z, i1 %a) {30; CHECK-LABEL: 'binary_or.4ops.i1'31; CHECK-NEXT:  Classifying expressions for: @binary_or.4ops.i132; CHECK-NEXT:    %t0 = or i1 %x, %y33; CHECK-NEXT:    --> (%x umax %y) U: full-set S: full-set34; CHECK-NEXT:    %t1 = or i1 %z, %a35; CHECK-NEXT:    --> (%z umax %a) U: full-set S: full-set36; CHECK-NEXT:    %r = or i1 %t0, %t137; CHECK-NEXT:    --> (%x umax %y umax %z umax %a) U: full-set S: full-set38; CHECK-NEXT:  Determining loop execution counts for: @binary_or.4ops.i139;40  %t0 = or i1 %x, %y41  %t1 = or i1 %z, %a42  %r = or i1 %t0, %t143  ret i1 %r44}45 46define i1 @binary_and.i1(i1 %x, i1 %y) {47; CHECK-LABEL: 'binary_and.i1'48; CHECK-NEXT:  Classifying expressions for: @binary_and.i149; CHECK-NEXT:    %r = and i1 %x, %y50; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set51; CHECK-NEXT:  Determining loop execution counts for: @binary_and.i152;53  %r = and i1 %x, %y54  ret i1 %r55}56 57define i2 @binary_and.i2(i2 %x, i2 %y) {58; CHECK-LABEL: 'binary_and.i2'59; CHECK-NEXT:  Classifying expressions for: @binary_and.i260; CHECK-NEXT:    %r = and i2 %x, %y61; CHECK-NEXT:    --> %r U: full-set S: full-set62; CHECK-NEXT:  Determining loop execution counts for: @binary_and.i263;64  %r = and i2 %x, %y65  ret i2 %r66}67 68define i1 @binary_and.4ops.i1(i1 %x, i1 %y, i1 %z, i1 %a) {69; CHECK-LABEL: 'binary_and.4ops.i1'70; CHECK-NEXT:  Classifying expressions for: @binary_and.4ops.i171; CHECK-NEXT:    %t0 = and i1 %x, %y72; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set73; CHECK-NEXT:    %t1 = and i1 %z, %a74; CHECK-NEXT:    --> (%z umin %a) U: full-set S: full-set75; CHECK-NEXT:    %r = and i1 %t0, %t176; CHECK-NEXT:    --> (%x umin %y umin %z umin %a) U: full-set S: full-set77; CHECK-NEXT:  Determining loop execution counts for: @binary_and.4ops.i178;79  %t0 = and i1 %x, %y80  %t1 = and i1 %z, %a81  %r = and i1 %t0, %t182  ret i1 %r83}84 85define i1 @binary_xor.i1(i1 %x, i1 %y) {86; CHECK-LABEL: 'binary_xor.i1'87; CHECK-NEXT:  Classifying expressions for: @binary_xor.i188; CHECK-NEXT:    %r = xor i1 %x, %y89; CHECK-NEXT:    --> (%x + %y) U: full-set S: full-set90; CHECK-NEXT:  Determining loop execution counts for: @binary_xor.i191;92  %r = xor i1 %x, %y93  ret i1 %r94}95 96define i2 @binary_xor.i2(i2 %x, i2 %y) {97; CHECK-LABEL: 'binary_xor.i2'98; CHECK-NEXT:  Classifying expressions for: @binary_xor.i299; CHECK-NEXT:    %r = xor i2 %x, %y100; CHECK-NEXT:    --> %r U: full-set S: full-set101; CHECK-NEXT:  Determining loop execution counts for: @binary_xor.i2102;103  %r = xor i2 %x, %y104  ret i2 %r105}106 107define i1 @binary_xor.4ops.i1(i1 %x, i1 %y, i1 %z, i1 %a) {108; CHECK-LABEL: 'binary_xor.4ops.i1'109; CHECK-NEXT:  Classifying expressions for: @binary_xor.4ops.i1110; CHECK-NEXT:    %t0 = xor i1 %x, %y111; CHECK-NEXT:    --> (%x + %y) U: full-set S: full-set112; CHECK-NEXT:    %t1 = xor i1 %z, %a113; CHECK-NEXT:    --> (%z + %a) U: full-set S: full-set114; CHECK-NEXT:    %r = xor i1 %t0, %t1115; CHECK-NEXT:    --> (%x + %y + %z + %a) U: full-set S: full-set116; CHECK-NEXT:  Determining loop execution counts for: @binary_xor.4ops.i1117;118  %t0 = xor i1 %x, %y119  %t1 = xor i1 %z, %a120  %r = xor i1 %t0, %t1121  ret i1 %r122}123 124define i1 @logical_or(i1 %x, i1 %y) {125; CHECK-LABEL: 'logical_or'126; CHECK-NEXT:  Classifying expressions for: @logical_or127; CHECK-NEXT:    %r = select i1 %x, i1 true, i1 %y128; CHECK-NEXT:    --> (true + ((true + %x) umin_seq (true + %y))) U: full-set S: full-set129; CHECK-NEXT:  Determining loop execution counts for: @logical_or130;131  %r = select i1 %x, i1 true, i1 %y132  ret i1 %r133}134 135define i1 @logical_and(i1 %x, i1 %y) {136; CHECK-LABEL: 'logical_and'137; CHECK-NEXT:  Classifying expressions for: @logical_and138; CHECK-NEXT:    %r = select i1 %x, i1 %y, i1 false139; CHECK-NEXT:    --> (%x umin_seq %y) U: full-set S: full-set140; CHECK-NEXT:  Determining loop execution counts for: @logical_and141;142  %r = select i1 %x, i1 %y, i1 false143  ret i1 %r144}145 146define i1 @select_x_or_false(i1 %c, i1 %x) {147; CHECK-LABEL: 'select_x_or_false'148; CHECK-NEXT:  Classifying expressions for: @select_x_or_false149; CHECK-NEXT:    %r = select i1 %c, i1 %x, i1 false150; CHECK-NEXT:    --> (%c umin_seq %x) U: full-set S: full-set151; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_false152;153  %r = select i1 %c, i1 %x, i1 false154  ret i1 %r155}156 157define i1 @select_false_or_x(i1 %c, i1 %x) {158; CHECK-LABEL: 'select_false_or_x'159; CHECK-NEXT:  Classifying expressions for: @select_false_or_x160; CHECK-NEXT:    %r = select i1 %c, i1 false, i1 %x161; CHECK-NEXT:    --> ((true + %c) umin_seq %x) U: full-set S: full-set162; CHECK-NEXT:  Determining loop execution counts for: @select_false_or_x163;164  %r = select i1 %c, i1 false, i1 %x165  ret i1 %r166}167 168define i1 @select_x_or_true(i1 %c, i1 %x) {169; CHECK-LABEL: 'select_x_or_true'170; CHECK-NEXT:  Classifying expressions for: @select_x_or_true171; CHECK-NEXT:    %r = select i1 %c, i1 %x, i1 true172; CHECK-NEXT:    --> (true + (%c umin_seq (true + %x))) U: full-set S: full-set173; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_true174;175  %r = select i1 %c, i1 %x, i1 true176  ret i1 %r177}178 179define i1 @select_true_or_x(i1 %c, i1 %x) {180; CHECK-LABEL: 'select_true_or_x'181; CHECK-NEXT:  Classifying expressions for: @select_true_or_x182; CHECK-NEXT:    %r = select i1 %c, i1 true, i1 %x183; CHECK-NEXT:    --> (true + ((true + %c) umin_seq (true + %x))) U: full-set S: full-set184; CHECK-NEXT:  Determining loop execution counts for: @select_true_or_x185;186  %r = select i1 %c, i1 true, i1 %x187  ret i1 %r188}189 190define i32 @select_x_or_zero(i1 %c, i32 %x) {191; CHECK-LABEL: 'select_x_or_zero'192; CHECK-NEXT:  Classifying expressions for: @select_x_or_zero193; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 0194; CHECK-NEXT:    --> %r U: full-set S: full-set195; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_zero196;197  %r = select i1 %c, i32 %x, i32 0198  ret i32 %r199}200 201define i32 @select_zero_or_x(i1 %c, i32 %x) {202; CHECK-LABEL: 'select_zero_or_x'203; CHECK-NEXT:  Classifying expressions for: @select_zero_or_x204; CHECK-NEXT:    %r = select i1 %c, i32 0, i32 %x205; CHECK-NEXT:    --> %r U: full-set S: full-set206; CHECK-NEXT:  Determining loop execution counts for: @select_zero_or_x207;208  %r = select i1 %c, i32 0, i32 %x209  ret i32 %r210}211 212define i32 @select_x_or_allones(i1 %c, i32 %x) {213; CHECK-LABEL: 'select_x_or_allones'214; CHECK-NEXT:  Classifying expressions for: @select_x_or_allones215; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 -1216; CHECK-NEXT:    --> %r U: full-set S: full-set217; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_allones218;219  %r = select i1 %c, i32 %x, i32 -1220  ret i32 %r221}222 223define i32 @select_allones_or_x(i1 %c, i32 %x) {224; CHECK-LABEL: 'select_allones_or_x'225; CHECK-NEXT:  Classifying expressions for: @select_allones_or_x226; CHECK-NEXT:    %r = select i1 %c, i32 -1, i32 %x227; CHECK-NEXT:    --> %r U: full-set S: full-set228; CHECK-NEXT:  Determining loop execution counts for: @select_allones_or_x229;230  %r = select i1 %c, i32 -1, i32 %x231  ret i32 %r232}233 234define i32 @select_x_or_intmax(i1 %c, i32 %x) {235; CHECK-LABEL: 'select_x_or_intmax'236; CHECK-NEXT:  Classifying expressions for: @select_x_or_intmax237; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 2147483647238; CHECK-NEXT:    --> %r U: full-set S: full-set239; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_intmax240;241  %r = select i1 %c, i32 %x, i32 2147483647242  ret i32 %r243}244 245define i32 @select_intmax_or_x(i1 %c, i32 %x) {246; CHECK-LABEL: 'select_intmax_or_x'247; CHECK-NEXT:  Classifying expressions for: @select_intmax_or_x248; CHECK-NEXT:    %r = select i1 %c, i32 2147483647, i32 %x249; CHECK-NEXT:    --> %r U: full-set S: full-set250; CHECK-NEXT:  Determining loop execution counts for: @select_intmax_or_x251;252  %r = select i1 %c, i32 2147483647, i32 %x253  ret i32 %r254}255 256define i32 @select_x_or_intmin(i1 %c, i32 %x) {257; CHECK-LABEL: 'select_x_or_intmin'258; CHECK-NEXT:  Classifying expressions for: @select_x_or_intmin259; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 -2147483648260; CHECK-NEXT:    --> %r U: full-set S: full-set261; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_intmin262;263  %r = select i1 %c, i32 %x, i32 -2147483648264  ret i32 %r265}266 267define i32 @select_intmin_or_x(i1 %c, i32 %x) {268; CHECK-LABEL: 'select_intmin_or_x'269; CHECK-NEXT:  Classifying expressions for: @select_intmin_or_x270; CHECK-NEXT:    %r = select i1 %c, i32 -2147483648, i32 %x271; CHECK-NEXT:    --> %r U: full-set S: full-set272; CHECK-NEXT:  Determining loop execution counts for: @select_intmin_or_x273;274  %r = select i1 %c, i32 -2147483648, i32 %x275  ret i32 %r276}277 278define i32 @select_x_or_constant(i1 %c, i32 %x) {279; CHECK-LABEL: 'select_x_or_constant'280; CHECK-NEXT:  Classifying expressions for: @select_x_or_constant281; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 42282; CHECK-NEXT:    --> %r U: full-set S: full-set283; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_constant284;285  %r = select i1 %c, i32 %x, i32 42286  ret i32 %r287}288 289define i32 @select_constant_or_x(i1 %c, i32 %y) {290; CHECK-LABEL: 'select_constant_or_x'291; CHECK-NEXT:  Classifying expressions for: @select_constant_or_x292; CHECK-NEXT:    %r = select i1 %c, i32 42, i32 %y293; CHECK-NEXT:    --> %r U: full-set S: full-set294; CHECK-NEXT:  Determining loop execution counts for: @select_constant_or_x295;296  %r = select i1 %c, i32 42, i32 %y297  ret i32 %r298}299 300define i32 @select_between_constants(i1 %c, i32 %y) {301; CHECK-LABEL: 'select_between_constants'302; CHECK-NEXT:  Classifying expressions for: @select_between_constants303; CHECK-NEXT:    %r = select i1 %c, i32 42, i32 24304; CHECK-NEXT:    --> %r U: [8,59) S: [8,59)305; CHECK-NEXT:  Determining loop execution counts for: @select_between_constants306;307  %r = select i1 %c, i32 42, i32 24308  ret i32 %r309}310 311define i32 @select_x_or_y(i1 %c, i32 %x, i32 %y) {312; CHECK-LABEL: 'select_x_or_y'313; CHECK-NEXT:  Classifying expressions for: @select_x_or_y314; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 %y315; CHECK-NEXT:    --> %r U: full-set S: full-set316; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_y317;318  %r = select i1 %c, i32 %x, i32 %y319  ret i32 %r320}321 322define i32 @select_x_or_y__noundef(i1 %c, i32 noundef %x, i32 noundef %y) {323; CHECK-LABEL: 'select_x_or_y__noundef'324; CHECK-NEXT:  Classifying expressions for: @select_x_or_y__noundef325; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 %y326; CHECK-NEXT:    --> %r U: full-set S: full-set327; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_y__noundef328;329  %r = select i1 %c, i32 %x, i32 %y330  ret i32 %r331}332 333define i32 @select_x_or_constantexpr(i1 %c, i32 %x) {334; CHECK-LABEL: 'select_x_or_constantexpr'335; CHECK-NEXT:  Classifying expressions for: @select_x_or_constantexpr336; CHECK-NEXT:    %r = select i1 %c, i32 %x, i32 ptrtoint (ptr @constant to i32)337; CHECK-NEXT:    --> %r U: full-set S: full-set338; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_constantexpr339;340  %r = select i1 %c, i32 %x, i32 ptrtoint (ptr @constant to i32)341  ret i32 %r342}343 344define i32 @select_constantexpr_or_x(i1 %c, i32 %x) {345; CHECK-LABEL: 'select_constantexpr_or_x'346; CHECK-NEXT:  Classifying expressions for: @select_constantexpr_or_x347; CHECK-NEXT:    %r = select i1 %c, i32 ptrtoint (ptr @constant to i32), i32 %x348; CHECK-NEXT:    --> %r U: full-set S: full-set349; CHECK-NEXT:  Determining loop execution counts for: @select_constantexpr_or_x350;351  %r = select i1 %c, i32 ptrtoint (ptr @constant to i32), i32 %x352  ret i32 %r353}354 355define ptr @select_x_or_nullptr(i1 %c, ptr %x) {356; CHECK-LABEL: 'select_x_or_nullptr'357; CHECK-NEXT:  Classifying expressions for: @select_x_or_nullptr358; CHECK-NEXT:    %r = select i1 %c, ptr %x, ptr null359; CHECK-NEXT:    --> %r U: full-set S: full-set360; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_nullptr361;362  %r = select i1 %c, ptr %x, ptr null363  ret ptr %r364}365 366define ptr @select_null_or_x(i1 %c, ptr %x) {367; CHECK-LABEL: 'select_null_or_x'368; CHECK-NEXT:  Classifying expressions for: @select_null_or_x369; CHECK-NEXT:    %r = select i1 %c, ptr null, ptr %x370; CHECK-NEXT:    --> %r U: full-set S: full-set371; CHECK-NEXT:  Determining loop execution counts for: @select_null_or_x372;373  %r = select i1 %c, ptr null, ptr %x374  ret ptr %r375}376 377define ptr @select_x_or_constantptr(i1 %c, ptr %x) {378; CHECK-LABEL: 'select_x_or_constantptr'379; CHECK-NEXT:  Classifying expressions for: @select_x_or_constantptr380; CHECK-NEXT:    %r = select i1 %c, ptr %x, ptr @constant381; CHECK-NEXT:    --> %r U: full-set S: full-set382; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_constantptr383;384  %r = select i1 %c, ptr %x, ptr @constant385  ret ptr %r386}387 388define ptr @select_constantptr_or_x(i1 %c, ptr %x) {389; CHECK-LABEL: 'select_constantptr_or_x'390; CHECK-NEXT:  Classifying expressions for: @select_constantptr_or_x391; CHECK-NEXT:    %r = select i1 %c, ptr @constant, ptr %x392; CHECK-NEXT:    --> %r U: full-set S: full-set393; CHECK-NEXT:  Determining loop execution counts for: @select_constantptr_or_x394;395  %r = select i1 %c, ptr @constant, ptr %x396  ret ptr %r397}398 399define ptr @select_between_constantptrs(i1 %c, ptr %x) {400; CHECK-LABEL: 'select_between_constantptrs'401; CHECK-NEXT:  Classifying expressions for: @select_between_constantptrs402; CHECK-NEXT:    %r = select i1 %c, ptr @constant, ptr @another_constant403; CHECK-NEXT:    --> %r U: [0,-3) S: [-9223372036854775808,9223372036854775805)404; CHECK-NEXT:  Determining loop execution counts for: @select_between_constantptrs405;406  %r = select i1 %c, ptr @constant, ptr @another_constant407  ret ptr %r408}409 410define ptr @tautological_select() {411; CHECK-LABEL: 'tautological_select'412; CHECK-NEXT:  Classifying expressions for: @tautological_select413; CHECK-NEXT:    %s = select i1 true, ptr @constant, ptr @another_constant414; CHECK-NEXT:    --> @constant U: [0,-3) S: [-9223372036854775808,9223372036854775805)415; CHECK-NEXT:    %r = getelementptr i8, ptr %s416; CHECK-NEXT:    --> @constant U: [0,-3) S: [-9223372036854775808,9223372036854775805)417; CHECK-NEXT:  Determining loop execution counts for: @tautological_select418;419  %s = select i1 true, ptr @constant, ptr @another_constant420  %r = getelementptr i8, ptr %s421  ret ptr %r422}423 424define ptr @tautological_select_like_phi(i32 %tc) {425; CHECK-LABEL: 'tautological_select_like_phi'426; CHECK-NEXT:  Classifying expressions for: @tautological_select_like_phi427; CHECK-NEXT:    %iv = phi i32 [ 0, %entry ], [ %iv.next, %latch ]428; CHECK-NEXT:    --> {0,+,1}<nuw><nsw><%loop> U: [0,101) S: [0,101) Exits: 100 LoopDispositions: { %loop: Computable }429; CHECK-NEXT:    %r = phi ptr [ @constant, %truebb ], [ @another_constant, %falsebb ]430; CHECK-NEXT:    --> @constant U: [0,-3) S: [-9223372036854775808,9223372036854775805) Exits: @constant LoopDispositions: { %loop: Invariant }431; CHECK-NEXT:    %iv.next = add i32 %iv, 1432; CHECK-NEXT:    --> {1,+,1}<nuw><nsw><%loop> U: [1,102) S: [1,102) Exits: 101 LoopDispositions: { %loop: Computable }433; CHECK-NEXT:  Determining loop execution counts for: @tautological_select_like_phi434; CHECK-NEXT:  Loop %loop: backedge-taken count is i32 100435; CHECK-NEXT:  Loop %loop: constant max backedge-taken count is i32 100436; CHECK-NEXT:  Loop %loop: symbolic max backedge-taken count is i32 100437; CHECK-NEXT:  Loop %loop: Trip multiple is 101438;439entry:440  br label %loop441 442loop:443  %iv = phi i32[ 0, %entry ], [ %iv.next, %latch ]444  br i1 true, label %truebb, label %falsebb445 446truebb:447  br label %latch448 449falsebb:450  br label %latch451 452latch:453  %r = phi ptr [ @constant, %truebb], [ @another_constant, %falsebb]454  %iv.next = add i32 %iv, 1455  %done = icmp eq i32 %iv, 100456  br i1 %done, label %end, label %loop457 458end:459  ret ptr %r460}461 462define i32 @umin_seq_x_y(i32 %x, i32 %y) {463; CHECK-LABEL: 'umin_seq_x_y'464; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y465; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x)466; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set467; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin468; CHECK-NEXT:    --> (%x umin_seq %y) U: full-set S: full-set469; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y470;471  %umin = call i32 @llvm.umin(i32 %y, i32 %x)472  %x.is.zero = icmp eq i32 %x, 0473  %r = select i1 %x.is.zero, i32 0, i32 %umin474  ret i32 %r475}476 477define i32 @umin_seq_x_y_tautological(i32 %x, i32 %y) {478; CHECK-LABEL: 'umin_seq_x_y_tautological'479; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_tautological480; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x)481; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set482; CHECK-NEXT:    %r = select i1 %umin.is.zero, i32 0, i32 %umin483; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set484; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_tautological485;486  %umin = call i32 @llvm.umin(i32 %y, i32 %x)487  %umin.is.zero = icmp eq i32 %umin, 0488  %r = select i1 %umin.is.zero, i32 0, i32 %umin489  ret i32 %r490}491define i32 @umin_seq_x_y_tautological_wrongtype(i32 %x, i32 %y) {492; CHECK-LABEL: 'umin_seq_x_y_tautological_wrongtype'493; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_tautological_wrongtype494; CHECK-NEXT:    %umax = call i32 @llvm.umax.i32(i32 %y, i32 %x)495; CHECK-NEXT:    --> (%x umax %y) U: full-set S: full-set496; CHECK-NEXT:    %r = select i1 %umax.is.zero, i32 0, i32 %umax497; CHECK-NEXT:    --> (%x umax %y) U: full-set S: full-set498; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_tautological_wrongtype499;500  %umax = call i32 @llvm.umax(i32 %y, i32 %x)501  %umax.is.zero = icmp eq i32 %umax, 0502  %r = select i1 %umax.is.zero, i32 0, i32 %umax503  ret i32 %r504}505 506define i32 @umin_seq_x_y_wrongtype0(i32 %x, i32 %y) {507; CHECK-LABEL: 'umin_seq_x_y_wrongtype0'508; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_wrongtype0509; CHECK-NEXT:    %umax = call i32 @llvm.umax.i32(i32 %y, i32 %x)510; CHECK-NEXT:    --> (%x umax %y) U: full-set S: full-set511; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umax512; CHECK-NEXT:    --> %r U: full-set S: full-set513; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_wrongtype0514;515  %umax = call i32 @llvm.umax(i32 %y, i32 %x)516  %x.is.zero = icmp eq i32 %x, 0517  %r = select i1 %x.is.zero, i32 0, i32 %umax518  ret i32 %r519}520define i32 @umin_seq_x_y_wrongtype1(i32 %x, i32 %y) {521; CHECK-LABEL: 'umin_seq_x_y_wrongtype1'522; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_wrongtype1523; CHECK-NEXT:    %smax = call i32 @llvm.smax.i32(i32 %y, i32 %x)524; CHECK-NEXT:    --> (%x smax %y) U: full-set S: full-set525; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %smax526; CHECK-NEXT:    --> %r U: full-set S: full-set527; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_wrongtype1528;529  %smax = call i32 @llvm.smax(i32 %y, i32 %x)530  %x.is.zero = icmp eq i32 %x, 0531  %r = select i1 %x.is.zero, i32 0, i32 %smax532  ret i32 %r533}534define i32 @umin_seq_x_y_wrongtype2(i32 %x, i32 %y) {535; CHECK-LABEL: 'umin_seq_x_y_wrongtype2'536; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_wrongtype2537; CHECK-NEXT:    %smin = call i32 @llvm.smin.i32(i32 %y, i32 %x)538; CHECK-NEXT:    --> (%x smin %y) U: full-set S: full-set539; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %smin540; CHECK-NEXT:    --> %r U: full-set S: full-set541; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_wrongtype2542;543  %smin = call i32 @llvm.smin(i32 %y, i32 %x)544  %x.is.zero = icmp eq i32 %x, 0545  %r = select i1 %x.is.zero, i32 0, i32 %smin546  ret i32 %r547}548 549define i32 @umin_seq_x_y_wrongtype3(i32 %x, i32 %y, i32 %z) {550; CHECK-LABEL: 'umin_seq_x_y_wrongtype3'551; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_wrongtype3552; CHECK-NEXT:    %umax = call i32 @llvm.umax.i32(i32 %x, i32 %z)553; CHECK-NEXT:    --> (%x umax %z) U: full-set S: full-set554; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %umax, i32 %y)555; CHECK-NEXT:    --> ((%x umax %z) umin %y) U: full-set S: full-set556; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin557; CHECK-NEXT:    --> %r U: full-set S: full-set558; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_wrongtype3559;560  %umax = call i32 @llvm.umax(i32 %x, i32 %z)561  %umin = call i32 @llvm.umin(i32 %umax, i32 %y)562  %x.is.zero = icmp eq i32 %x, 0563  %r = select i1 %x.is.zero, i32 0, i32 %umin564  ret i32 %r565}566 567define i32 @umin_seq_y_x(i32 %x, i32 %y) {568; CHECK-LABEL: 'umin_seq_y_x'569; CHECK-NEXT:  Classifying expressions for: @umin_seq_y_x570; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %x, i32 %y)571; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set572; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin573; CHECK-NEXT:    --> (%y umin_seq %x) U: full-set S: full-set574; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_y_x575;576  %umin = call i32 @llvm.umin(i32 %x, i32 %y)577  %x.is.zero = icmp eq i32 %y, 0578  %r = select i1 %x.is.zero, i32 0, i32 %umin579  ret i32 %r580}581 582define i32 @umin_seq_x_x_y_z(i32 %x, i32 %y, i32 %z) {583; CHECK-LABEL: 'umin_seq_x_x_y_z'584; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_x_y_z585; CHECK-NEXT:    %umin0 = call i32 @llvm.umin.i32(i32 %z, i32 %x)586; CHECK-NEXT:    --> (%x umin %z) U: full-set S: full-set587; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %umin0, i32 %y)588; CHECK-NEXT:    --> (%x umin %y umin %z) U: full-set S: full-set589; CHECK-NEXT:    %r0 = select i1 %x.is.zero, i32 0, i32 %umin590; CHECK-NEXT:    --> (%x umin_seq (%y umin %z)) U: full-set S: full-set591; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %r0592; CHECK-NEXT:    --> (%x umin_seq (%y umin %z)) U: full-set S: full-set593; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_x_y_z594;595  %umin0 = call i32 @llvm.umin(i32 %z, i32 %x)596  %umin = call i32 @llvm.umin(i32 %umin0, i32 %y)597  %x.is.zero = icmp eq i32 %x, 0598  %r0 = select i1 %x.is.zero, i32 0, i32 %umin599  %r = select i1 %x.is.zero, i32 0, i32 %r0600  ret i32 %r601}602 603define i32 @umin_seq_x_y_z(i32 %x, i32 %y, i32 %z) {604; CHECK-LABEL: 'umin_seq_x_y_z'605; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_z606; CHECK-NEXT:    %umin0 = call i32 @llvm.umin.i32(i32 %z, i32 %x)607; CHECK-NEXT:    --> (%x umin %z) U: full-set S: full-set608; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %umin0, i32 %y)609; CHECK-NEXT:    --> (%x umin %y umin %z) U: full-set S: full-set610; CHECK-NEXT:    %r0 = select i1 %y.is.zero, i32 0, i32 %umin611; CHECK-NEXT:    --> (%y umin_seq (%x umin %z)) U: full-set S: full-set612; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %r0613; CHECK-NEXT:    --> (%x umin_seq %y umin_seq %z) U: full-set S: full-set614; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_z615;616  %umin0 = call i32 @llvm.umin(i32 %z, i32 %x)617  %umin = call i32 @llvm.umin(i32 %umin0, i32 %y)618  %x.is.zero = icmp eq i32 %x, 0619  %y.is.zero = icmp eq i32 %y, 0620  %r0 = select i1 %y.is.zero, i32 0, i32 %umin621  %r = select i1 %x.is.zero, i32 0, i32 %r0622  ret i32 %r623}624 625define i32 @umin_seq_a_b_c_d(i32 %a, i32 %b, i32 %c, i32 %d) {626; CHECK-LABEL: 'umin_seq_a_b_c_d'627; CHECK-NEXT:  Classifying expressions for: @umin_seq_a_b_c_d628; CHECK-NEXT:    %umin1 = call i32 @llvm.umin.i32(i32 %c, i32 %d)629; CHECK-NEXT:    --> (%c umin %d) U: full-set S: full-set630; CHECK-NEXT:    %r1 = select i1 %c.is.zero, i32 0, i32 %umin1631; CHECK-NEXT:    --> (%c umin_seq %d) U: full-set S: full-set632; CHECK-NEXT:    %umin0 = call i32 @llvm.umin.i32(i32 %a, i32 %b)633; CHECK-NEXT:    --> (%a umin %b) U: full-set S: full-set634; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %umin0, i32 %r1)635; CHECK-NEXT:    --> ((%c umin_seq %d) umin %a umin %b) U: full-set S: full-set636; CHECK-NEXT:    %r = select i1 %d.is.zero, i32 0, i32 %umin637; CHECK-NEXT:    --> (%d umin_seq (%a umin %b umin %c)) U: full-set S: full-set638; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_a_b_c_d639;640  %umin1 = call i32 @llvm.umin(i32 %c, i32 %d)641  %c.is.zero = icmp eq i32 %c, 0642  %r1 = select i1 %c.is.zero, i32 0, i32 %umin1643 644  %umin0 = call i32 @llvm.umin(i32 %a, i32 %b)645  %umin = call i32 @llvm.umin(i32 %umin0, i32 %r1)646  %d.is.zero = icmp eq i32 %d, 0647  %r = select i1 %d.is.zero, i32 0, i32 %umin648  ret i32 %r649}650 651define i32 @umin_seq_x_y_zext_both(i8 %x.narrow, i32 %y) {652; CHECK-LABEL: 'umin_seq_x_y_zext_both'653; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_zext_both654; CHECK-NEXT:    %x = zext i8 %x.narrow to i32655; CHECK-NEXT:    --> (zext i8 %x.narrow to i32) U: [0,256) S: [0,256)656; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x)657; CHECK-NEXT:    --> ((zext i8 %x.narrow to i32) umin %y) U: [0,256) S: [0,256)658; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin659; CHECK-NEXT:    --> ((zext i8 %x.narrow to i32) umin_seq %y) U: [0,256) S: [0,256)660; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_zext_both661;662  %x = zext i8 %x.narrow to i32663  %umin = call i32 @llvm.umin(i32 %y, i32 %x)664  %x.is.zero = icmp eq i32 %x, 0665  %r = select i1 %x.is.zero, i32 0, i32 %umin666  ret i32 %r667}668 669define i32 @umin_seq_x_y_zext_in_umin(i8 %x.narrow, i32 %y) {670; CHECK-LABEL: 'umin_seq_x_y_zext_in_umin'671; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_zext_in_umin672; CHECK-NEXT:    %x = zext i8 %x.narrow to i32673; CHECK-NEXT:    --> (zext i8 %x.narrow to i32) U: [0,256) S: [0,256)674; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x)675; CHECK-NEXT:    --> ((zext i8 %x.narrow to i32) umin %y) U: [0,256) S: [0,256)676; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin677; CHECK-NEXT:    --> ((zext i8 %x.narrow to i32) umin_seq %y) U: [0,256) S: [0,256)678; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_zext_in_umin679;680  %x = zext i8 %x.narrow to i32681  %umin = call i32 @llvm.umin(i32 %y, i32 %x)682  %x.is.zero = icmp eq i8 %x.narrow, 0683  %r = select i1 %x.is.zero, i32 0, i32 %umin684  ret i32 %r685}686 687define i8 @umin_seq_x_y_zext_in_iszero(i8 %x, i8 %y) {688; CHECK-LABEL: 'umin_seq_x_y_zext_in_iszero'689; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_zext_in_iszero690; CHECK-NEXT:    %x.wide = zext i8 %x to i32691; CHECK-NEXT:    --> (zext i8 %x to i32) U: [0,256) S: [0,256)692; CHECK-NEXT:    %umin = call i8 @llvm.umin.i8(i8 %y, i8 %x)693; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set694; CHECK-NEXT:    %r = select i1 %x.is.zero, i8 0, i8 %umin695; CHECK-NEXT:    --> (%x umin_seq %y) U: full-set S: full-set696; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_zext_in_iszero697;698  %x.wide = zext i8 %x to i32699  %umin = call i8 @llvm.umin.i8(i8 %y, i8 %x)700  %x.is.zero = icmp eq i32 %x.wide, 0701  %r = select i1 %x.is.zero, i8 0, i8 %umin702  ret i8 %r703}704 705define i32 @umin_seq_x_y_zext_of_umin(i8 %x, i8 %y) {706; CHECK-LABEL: 'umin_seq_x_y_zext_of_umin'707; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_zext_of_umin708; CHECK-NEXT:    %umin.narrow = call i8 @llvm.umin.i8(i8 %y, i8 %x)709; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set710; CHECK-NEXT:    %umin = zext i8 %umin.narrow to i32711; CHECK-NEXT:    --> ((zext i8 %x to i32) umin (zext i8 %y to i32)) U: [0,256) S: [0,256)712; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin713; CHECK-NEXT:    --> ((zext i8 %x to i32) umin_seq (zext i8 %y to i32)) U: [0,256) S: [0,256)714; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_zext_of_umin715;716  %umin.narrow = call i8 @llvm.umin.i8(i8 %y, i8 %x)717  %umin = zext i8 %umin.narrow to i32718  %x.is.zero = icmp eq i8 %x, 0719  %r = select i1 %x.is.zero, i32 0, i32 %umin720  ret i32 %r721}722 723define i32 @umin_seq_x_y_sext_both(i8 %x.narrow, i32 %y) {724; CHECK-LABEL: 'umin_seq_x_y_sext_both'725; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_sext_both726; CHECK-NEXT:    %x = sext i8 %x.narrow to i32727; CHECK-NEXT:    --> (sext i8 %x.narrow to i32) U: [-128,128) S: [-128,128)728; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x)729; CHECK-NEXT:    --> ((sext i8 %x.narrow to i32) umin %y) U: full-set S: full-set730; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin731; CHECK-NEXT:    --> ((sext i8 %x.narrow to i32) umin_seq %y) U: full-set S: full-set732; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_sext_both733;734  %x = sext i8 %x.narrow to i32735  %umin = call i32 @llvm.umin(i32 %y, i32 %x)736  %x.is.zero = icmp eq i32 %x, 0737  %r = select i1 %x.is.zero, i32 0, i32 %umin738  ret i32 %r739}740 741define i32 @umin_seq_x_y_sext_in_umin(i8 %x.narrow, i32 %y) {742; CHECK-LABEL: 'umin_seq_x_y_sext_in_umin'743; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_sext_in_umin744; CHECK-NEXT:    %x = sext i8 %x.narrow to i32745; CHECK-NEXT:    --> (sext i8 %x.narrow to i32) U: [-128,128) S: [-128,128)746; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x)747; CHECK-NEXT:    --> ((sext i8 %x.narrow to i32) umin %y) U: full-set S: full-set748; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin749; CHECK-NEXT:    --> %r U: full-set S: full-set750; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_sext_in_umin751;752  %x = sext i8 %x.narrow to i32753  %umin = call i32 @llvm.umin(i32 %y, i32 %x)754  %x.is.zero = icmp eq i8 %x.narrow, 0755  %r = select i1 %x.is.zero, i32 0, i32 %umin756  ret i32 %r757}758 759define i8 @umin_seq_x_y_sext_in_iszero(i8 %x, i8 %y) {760; CHECK-LABEL: 'umin_seq_x_y_sext_in_iszero'761; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_sext_in_iszero762; CHECK-NEXT:    %x.wide = sext i8 %x to i32763; CHECK-NEXT:    --> (sext i8 %x to i32) U: [-128,128) S: [-128,128)764; CHECK-NEXT:    %umin = call i8 @llvm.umin.i8(i8 %y, i8 %x)765; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set766; CHECK-NEXT:    %r = select i1 %x.is.zero, i8 0, i8 %umin767; CHECK-NEXT:    --> %r U: full-set S: full-set768; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_sext_in_iszero769;770  %x.wide = sext i8 %x to i32771  %umin = call i8 @llvm.umin.i8(i8 %y, i8 %x)772  %x.is.zero = icmp eq i32 %x.wide, 0773  %r = select i1 %x.is.zero, i8 0, i8 %umin774  ret i8 %r775}776 777define i32 @umin_seq_x_y_sext_of_umin(i8 %x, i8 %y) {778; CHECK-LABEL: 'umin_seq_x_y_sext_of_umin'779; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_sext_of_umin780; CHECK-NEXT:    %umin.narrow = call i8 @llvm.umin.i8(i8 %y, i8 %x)781; CHECK-NEXT:    --> (%x umin %y) U: full-set S: full-set782; CHECK-NEXT:    %umin = sext i8 %umin.narrow to i32783; CHECK-NEXT:    --> (sext i8 (%x umin %y) to i32) U: [-128,128) S: [-128,128)784; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin785; CHECK-NEXT:    --> %r U: [-128,128) S: [-128,128)786; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_sext_of_umin787;788  %umin.narrow = call i8 @llvm.umin.i8(i8 %y, i8 %x)789  %umin = sext i8 %umin.narrow to i32790  %x.is.zero = icmp eq i8 %x, 0791  %r = select i1 %x.is.zero, i32 0, i32 %umin792  ret i32 %r793}794 795define i32 @umin_seq_x_y_zext_vs_sext(i8 %x.narrow, i32 %y) {796; CHECK-LABEL: 'umin_seq_x_y_zext_vs_sext'797; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_zext_vs_sext798; CHECK-NEXT:    %x.zext = zext i8 %x.narrow to i32799; CHECK-NEXT:    --> (zext i8 %x.narrow to i32) U: [0,256) S: [0,256)800; CHECK-NEXT:    %x.sext = sext i8 %x.narrow to i32801; CHECK-NEXT:    --> (sext i8 %x.narrow to i32) U: [-128,128) S: [-128,128)802; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x.zext)803; CHECK-NEXT:    --> ((zext i8 %x.narrow to i32) umin %y) U: [0,256) S: [0,256)804; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin805; CHECK-NEXT:    --> %r U: [0,256) S: [0,256)806; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_zext_vs_sext807;808  %x.zext = zext i8 %x.narrow to i32809  %x.sext = sext i8 %x.narrow to i32810  %umin = call i32 @llvm.umin(i32 %y, i32 %x.zext)811  %x.is.zero = icmp eq i32 %x.sext, 0812  %r = select i1 %x.is.zero, i32 0, i32 %umin813  ret i32 %r814}815define i32 @umin_seq_x_y_sext_vs_zext(i8 %x.narrow, i32 %y) {816; CHECK-LABEL: 'umin_seq_x_y_sext_vs_zext'817; CHECK-NEXT:  Classifying expressions for: @umin_seq_x_y_sext_vs_zext818; CHECK-NEXT:    %x.zext = zext i8 %x.narrow to i32819; CHECK-NEXT:    --> (zext i8 %x.narrow to i32) U: [0,256) S: [0,256)820; CHECK-NEXT:    %x.sext = sext i8 %x.narrow to i32821; CHECK-NEXT:    --> (sext i8 %x.narrow to i32) U: [-128,128) S: [-128,128)822; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %y, i32 %x.sext)823; CHECK-NEXT:    --> ((sext i8 %x.narrow to i32) umin %y) U: full-set S: full-set824; CHECK-NEXT:    %r = select i1 %x.is.zero, i32 0, i32 %umin825; CHECK-NEXT:    --> %r U: full-set S: full-set826; CHECK-NEXT:  Determining loop execution counts for: @umin_seq_x_y_sext_vs_zext827;828  %x.zext = zext i8 %x.narrow to i32829  %x.sext = sext i8 %x.narrow to i32830  %umin = call i32 @llvm.umin(i32 %y, i32 %x.sext)831  %x.is.zero = icmp eq i32 %x.zext, 0832  %r = select i1 %x.is.zero, i32 0, i32 %umin833  ret i32 %r834}835 836define i32 @select_x_or_zero_expanded(i1 %c, i32 %x) {837; CHECK-LABEL: 'select_x_or_zero_expanded'838; CHECK-NEXT:  Classifying expressions for: @select_x_or_zero_expanded839; CHECK-NEXT:    %c.splat = sext i1 %c to i32840; CHECK-NEXT:    --> (sext i1 %c to i32) U: [-1,1) S: [-1,1)841; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %c.splat, i32 %x)842; CHECK-NEXT:    --> ((sext i1 %c to i32) umin %x) U: full-set S: full-set843; CHECK-NEXT:    %r = select i1 %v0.is.zero, i32 0, i32 %umin844; CHECK-NEXT:    --> ((sext i1 %c to i32) umin_seq %x) U: full-set S: full-set845; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_zero_expanded846;847  %c.splat = sext i1 %c to i32848  %umin = call i32 @llvm.umin(i32 %c.splat, i32 %x)849  %v0.is.zero = icmp eq i32 %c.splat, 0850  %r = select i1 %v0.is.zero, i32 0, i32 %umin851  ret i32 %r852}853 854define i32 @select_zero_or_x_expanded(i1 %c, i32 %y) {855; CHECK-LABEL: 'select_zero_or_x_expanded'856; CHECK-NEXT:  Classifying expressions for: @select_zero_or_x_expanded857; CHECK-NEXT:    %c.splat = sext i1 %c to i32858; CHECK-NEXT:    --> (sext i1 %c to i32) U: [-1,1) S: [-1,1)859; CHECK-NEXT:    %c.splat.not = xor i32 %c.splat, -1860; CHECK-NEXT:    --> (-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw> U: [-1,1) S: [-1,1)861; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %c.splat.not, i32 %y)862; CHECK-NEXT:    --> ((-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw> umin %y) U: full-set S: full-set863; CHECK-NEXT:    %r = select i1 %v0.is.zero, i32 0, i32 %umin864; CHECK-NEXT:    --> ((-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw> umin_seq %y) U: full-set S: full-set865; CHECK-NEXT:  Determining loop execution counts for: @select_zero_or_x_expanded866;867  %c.splat = sext i1 %c to i32868  %c.splat.not = xor i32 %c.splat, -1869  %umin = call i32 @llvm.umin(i32 %c.splat.not, i32 %y)870  %v0.is.zero = icmp eq i32 %c.splat.not, 0871  %r = select i1 %v0.is.zero, i32 0, i32 %umin872  ret i32 %r873}874define i32 @select_zero_or_x_expanded2(i1 %c, i32 %y) {875; CHECK-LABEL: 'select_zero_or_x_expanded2'876; CHECK-NEXT:  Classifying expressions for: @select_zero_or_x_expanded2877; CHECK-NEXT:    %c.not = xor i1 %c, true878; CHECK-NEXT:    --> (true + %c) U: full-set S: full-set879; CHECK-NEXT:    %c.not.splat = sext i1 %c.not to i32880; CHECK-NEXT:    --> (sext i1 (true + %c) to i32) U: [-1,1) S: [-1,1)881; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %c.not.splat, i32 %y)882; CHECK-NEXT:    --> ((sext i1 (true + %c) to i32) umin %y) U: full-set S: full-set883; CHECK-NEXT:    %r = select i1 %v0.is.zero, i32 0, i32 %umin884; CHECK-NEXT:    --> ((sext i1 (true + %c) to i32) umin_seq %y) U: full-set S: full-set885; CHECK-NEXT:  Determining loop execution counts for: @select_zero_or_x_expanded2886;887  %c.not = xor i1 %c, -1888  %c.not.splat = sext i1 %c.not to i32889  %umin = call i32 @llvm.umin(i32 %c.not.splat, i32 %y)890  %v0.is.zero = icmp eq i32 %c.not.splat, 0891  %r = select i1 %v0.is.zero, i32 0, i32 %umin892  ret i32 %r893}894 895define i32 @select_x_or_constant_expanded(i1 %c, i32 %x) {896; CHECK-LABEL: 'select_x_or_constant_expanded'897; CHECK-NEXT:  Classifying expressions for: @select_x_or_constant_expanded898; CHECK-NEXT:    %c.splat = sext i1 %c to i32899; CHECK-NEXT:    --> (sext i1 %c to i32) U: [-1,1) S: [-1,1)900; CHECK-NEXT:    %x.off = sub i32 %x, 42901; CHECK-NEXT:    --> (-42 + %x) U: full-set S: full-set902; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %c.splat, i32 %x.off)903; CHECK-NEXT:    --> ((sext i1 %c to i32) umin (-42 + %x)) U: full-set S: full-set904; CHECK-NEXT:    %r.off = select i1 %v0.is.zero, i32 0, i32 %umin905; CHECK-NEXT:    --> ((sext i1 %c to i32) umin_seq (-42 + %x)) U: full-set S: full-set906; CHECK-NEXT:    %r = add i32 %r.off, 42907; CHECK-NEXT:    --> (42 + ((sext i1 %c to i32) umin_seq (-42 + %x))) U: full-set S: full-set908; CHECK-NEXT:  Determining loop execution counts for: @select_x_or_constant_expanded909;910  %c.splat = sext i1 %c to i32911  %x.off = sub i32 %x, 42912  %umin = call i32 @llvm.umin(i32 %c.splat, i32 %x.off)913  %v0.is.zero = icmp eq i32 %c.splat, 0914  %r.off = select i1 %v0.is.zero, i32 0, i32 %umin915  %r = add i32 %r.off, 42916  ret i32 %r917}918 919define i32 @select_constant_or_y_expanded(i1 %c, i32 %y) {920; CHECK-LABEL: 'select_constant_or_y_expanded'921; CHECK-NEXT:  Classifying expressions for: @select_constant_or_y_expanded922; CHECK-NEXT:    %c.splat = sext i1 %c to i32923; CHECK-NEXT:    --> (sext i1 %c to i32) U: [-1,1) S: [-1,1)924; CHECK-NEXT:    %c.splat.not = xor i32 %c.splat, -1925; CHECK-NEXT:    --> (-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw> U: [-1,1) S: [-1,1)926; CHECK-NEXT:    %y.off = sub i32 %y, 42927; CHECK-NEXT:    --> (-42 + %y) U: full-set S: full-set928; CHECK-NEXT:    %umin = call i32 @llvm.umin.i32(i32 %c.splat.not, i32 %y.off)929; CHECK-NEXT:    --> ((-42 + %y) umin (-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw>) U: full-set S: full-set930; CHECK-NEXT:    %r.off = select i1 %v0.is.zero, i32 0, i32 %umin931; CHECK-NEXT:    --> ((-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw> umin_seq (-42 + %y)) U: full-set S: full-set932; CHECK-NEXT:    %r = add i32 %r.off, 42933; CHECK-NEXT:    --> (42 + ((-1 + (-1 * (sext i1 %c to i32))<nsw>)<nsw> umin_seq (-42 + %y))) U: full-set S: full-set934; CHECK-NEXT:  Determining loop execution counts for: @select_constant_or_y_expanded935;936  %c.splat = sext i1 %c to i32937  %c.splat.not = xor i32 %c.splat, -1938  %y.off = sub i32 %y, 42939  %umin = call i32 @llvm.umin(i32 %c.splat.not, i32 %y.off)940  %v0.is.zero = icmp eq i32 %c.splat.not, 0941  %r.off = select i1 %v0.is.zero, i32 0, i32 %umin942  %r = add i32 %r.off, 42943  ret i32 %r944}945 946declare i8 @llvm.umin.i8(i8, i8)947declare i8 @llvm.umax.i8(i8, i8)948declare i8 @llvm.smin.i8(i8, i8)949declare i8 @llvm.smax.i8(i8, i8)950 951declare i32 @llvm.umin(i32, i32)952declare i32 @llvm.umax(i32, i32)953declare i32 @llvm.smin(i32, i32)954declare i32 @llvm.smax(i32, i32)955