248 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt -disable-output "-passes=print<scalar-evolution>" < %s 2>&1 | FileCheck %s3 4define ptr @pointer_select_two_objects(i1 %cond, ptr %first_obj, ptr %second_obj) {5; CHECK-LABEL: 'pointer_select_two_objects'6; CHECK-NEXT: Classifying expressions for: @pointer_select_two_objects7; CHECK-NEXT: %r = select i1 %cond, ptr %first_obj, ptr %second_obj8; CHECK-NEXT: --> %r U: full-set S: full-set9; CHECK-NEXT: Determining loop execution counts for: @pointer_select_two_objects10;11 %r = select i1 %cond, ptr %first_obj, ptr %second_obj12 ret ptr %r13}14 15;--16 17define ptr @pointer_select_same_object_constant_offsets(i1 %cond, ptr %obj) {18; CHECK-LABEL: 'pointer_select_same_object_constant_offsets'19; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_constant_offsets20; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 4221; CHECK-NEXT: --> (42 + %obj) U: full-set S: full-set22; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 2423; CHECK-NEXT: --> (24 + %obj) U: full-set S: full-set24; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr25; CHECK-NEXT: --> %r U: full-set S: full-set26; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_constant_offsets27;28 %true_ptr = getelementptr i8, ptr %obj, i64 4229 %false_ptr = getelementptr i8, ptr %obj, i64 2430 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr31 ret ptr %r32}33 34define ptr @pointer_select_same_object_variable_offsets(i1 %cond, ptr %obj, i64 %true_off, i64 %false_off) {35; CHECK-LABEL: 'pointer_select_same_object_variable_offsets'36; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_variable_offsets37; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 %true_off38; CHECK-NEXT: --> (%true_off + %obj) U: full-set S: full-set39; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 %false_off40; CHECK-NEXT: --> (%false_off + %obj) U: full-set S: full-set41; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr42; CHECK-NEXT: --> %r U: full-set S: full-set43; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_variable_offsets44;45 %true_ptr = getelementptr i8, ptr %obj, i64 %true_off46 %false_ptr = getelementptr i8, ptr %obj, i64 %false_off47 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr48 ret ptr %r49}50 51define ptr @pointer_select_same_object_constant_offset_vs_variable_offset(i1 %cond, ptr %obj, i64 %false_off) {52; CHECK-LABEL: 'pointer_select_same_object_constant_offset_vs_variable_offset'53; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_constant_offset_vs_variable_offset54; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 4255; CHECK-NEXT: --> (42 + %obj) U: full-set S: full-set56; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 %false_off57; CHECK-NEXT: --> (%false_off + %obj) U: full-set S: full-set58; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr59; CHECK-NEXT: --> %r U: full-set S: full-set60; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_constant_offset_vs_variable_offset61;62 %true_ptr = getelementptr i8, ptr %obj, i64 4263 %false_ptr = getelementptr i8, ptr %obj, i64 %false_off64 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr65 ret ptr %r66}67 68define ptr @pointer_select_same_object_variable_offset_vs_constant_offset(i1 %cond, ptr %obj, i64 %true_off) {69; CHECK-LABEL: 'pointer_select_same_object_variable_offset_vs_constant_offset'70; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_variable_offset_vs_constant_offset71; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 %true_off72; CHECK-NEXT: --> (%true_off + %obj) U: full-set S: full-set73; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 4274; CHECK-NEXT: --> (42 + %obj) U: full-set S: full-set75; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr76; CHECK-NEXT: --> %r U: full-set S: full-set77; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_variable_offset_vs_constant_offset78;79 %true_ptr = getelementptr i8, ptr %obj, i64 %true_off80 %false_ptr = getelementptr i8, ptr %obj, i64 4281 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr82 ret ptr %r83}84 85;--86 87define ptr @pointer_select_same_object_with_constant_base_offset__constant_offsets(i1 %cond, ptr %obj.base) {88; CHECK-LABEL: 'pointer_select_same_object_with_constant_base_offset__constant_offsets'89; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_constant_base_offset__constant_offsets90; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 1291; CHECK-NEXT: --> (12 + %obj.base) U: full-set S: full-set92; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 4293; CHECK-NEXT: --> (54 + %obj.base) U: full-set S: full-set94; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 2495; CHECK-NEXT: --> (36 + %obj.base) U: full-set S: full-set96; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr97; CHECK-NEXT: --> %r U: full-set S: full-set98; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_constant_base_offset__constant_offsets99;100 %obj = getelementptr i8, ptr %obj.base, i64 12101 %true_ptr = getelementptr i8, ptr %obj, i64 42102 %false_ptr = getelementptr i8, ptr %obj, i64 24103 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr104 ret ptr %r105}106 107define ptr @pointer_select_same_object_with_constant_base_offset__variable_offsets(i1 %cond, ptr %obj.base, i64 %true_off, i64 %false_off) {108; CHECK-LABEL: 'pointer_select_same_object_with_constant_base_offset__variable_offsets'109; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_constant_base_offset__variable_offsets110; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 12111; CHECK-NEXT: --> (12 + %obj.base) U: full-set S: full-set112; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 %true_off113; CHECK-NEXT: --> (12 + %true_off + %obj.base) U: full-set S: full-set114; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 %false_off115; CHECK-NEXT: --> (12 + %false_off + %obj.base) U: full-set S: full-set116; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr117; CHECK-NEXT: --> %r U: full-set S: full-set118; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_constant_base_offset__variable_offsets119;120 %obj = getelementptr i8, ptr %obj.base, i64 12121 %true_ptr = getelementptr i8, ptr %obj, i64 %true_off122 %false_ptr = getelementptr i8, ptr %obj, i64 %false_off123 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr124 ret ptr %r125}126 127define ptr @pointer_select_same_object_with_constant_base_offset__constant_offset_vs_variable_offset(i1 %cond, ptr %obj.base, i64 %false_off) {128; CHECK-LABEL: 'pointer_select_same_object_with_constant_base_offset__constant_offset_vs_variable_offset'129; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_constant_base_offset__constant_offset_vs_variable_offset130; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 12131; CHECK-NEXT: --> (12 + %obj.base) U: full-set S: full-set132; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 42133; CHECK-NEXT: --> (54 + %obj.base) U: full-set S: full-set134; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 %false_off135; CHECK-NEXT: --> (12 + %false_off + %obj.base) U: full-set S: full-set136; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr137; CHECK-NEXT: --> %r U: full-set S: full-set138; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_constant_base_offset__constant_offset_vs_variable_offset139;140 %obj = getelementptr i8, ptr %obj.base, i64 12141 %true_ptr = getelementptr i8, ptr %obj, i64 42142 %false_ptr = getelementptr i8, ptr %obj, i64 %false_off143 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr144 ret ptr %r145}146 147define ptr @pointer_select_same_object_with_constant_base_offset__variable_offset_vs_constant_offset(i1 %cond, ptr %obj.base, i64 %true_off) {148; CHECK-LABEL: 'pointer_select_same_object_with_constant_base_offset__variable_offset_vs_constant_offset'149; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_constant_base_offset__variable_offset_vs_constant_offset150; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 12151; CHECK-NEXT: --> (12 + %obj.base) U: full-set S: full-set152; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 %true_off153; CHECK-NEXT: --> (12 + %true_off + %obj.base) U: full-set S: full-set154; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 42155; CHECK-NEXT: --> (54 + %obj.base) U: full-set S: full-set156; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr157; CHECK-NEXT: --> %r U: full-set S: full-set158; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_constant_base_offset__variable_offset_vs_constant_offset159;160 %obj = getelementptr i8, ptr %obj.base, i64 12161 %true_ptr = getelementptr i8, ptr %obj, i64 %true_off162 %false_ptr = getelementptr i8, ptr %obj, i64 42163 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr164 ret ptr %r165}166 167;--168 169define ptr @pointer_select_same_object_with_variable_base_offset__constant_offsets(i1 %cond, ptr %obj.base, i64 %base_offset) {170; CHECK-LABEL: 'pointer_select_same_object_with_variable_base_offset__constant_offsets'171; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_variable_base_offset__constant_offsets172; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 %base_offset173; CHECK-NEXT: --> (%base_offset + %obj.base) U: full-set S: full-set174; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 42175; CHECK-NEXT: --> (42 + %base_offset + %obj.base) U: full-set S: full-set176; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 24177; CHECK-NEXT: --> (24 + %base_offset + %obj.base) U: full-set S: full-set178; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr179; CHECK-NEXT: --> %r U: full-set S: full-set180; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_variable_base_offset__constant_offsets181;182 %obj = getelementptr i8, ptr %obj.base, i64 %base_offset183 %true_ptr = getelementptr i8, ptr %obj, i64 42184 %false_ptr = getelementptr i8, ptr %obj, i64 24185 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr186 ret ptr %r187}188 189define ptr @pointer_select_same_object_with_variable_base_offset__variable_offsets(i1 %cond, ptr %obj.base, i64 %base_offset, i64 %true_off, i64 %false_off) {190; CHECK-LABEL: 'pointer_select_same_object_with_variable_base_offset__variable_offsets'191; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_variable_base_offset__variable_offsets192; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 %base_offset193; CHECK-NEXT: --> (%base_offset + %obj.base) U: full-set S: full-set194; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 %true_off195; CHECK-NEXT: --> (%base_offset + %true_off + %obj.base) U: full-set S: full-set196; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 %false_off197; CHECK-NEXT: --> (%base_offset + %false_off + %obj.base) U: full-set S: full-set198; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr199; CHECK-NEXT: --> %r U: full-set S: full-set200; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_variable_base_offset__variable_offsets201;202 %obj = getelementptr i8, ptr %obj.base, i64 %base_offset203 %true_ptr = getelementptr i8, ptr %obj, i64 %true_off204 %false_ptr = getelementptr i8, ptr %obj, i64 %false_off205 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr206 ret ptr %r207}208 209define ptr @pointer_select_same_object_with_variable_base_offset__constant_offset_vs_variable_offset(i1 %cond, ptr %obj.base, i64 %base_offset, i64 %false_off) {210; CHECK-LABEL: 'pointer_select_same_object_with_variable_base_offset__constant_offset_vs_variable_offset'211; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_variable_base_offset__constant_offset_vs_variable_offset212; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 %base_offset213; CHECK-NEXT: --> (%base_offset + %obj.base) U: full-set S: full-set214; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 42215; CHECK-NEXT: --> (42 + %base_offset + %obj.base) U: full-set S: full-set216; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 %false_off217; CHECK-NEXT: --> (%base_offset + %false_off + %obj.base) U: full-set S: full-set218; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr219; CHECK-NEXT: --> %r U: full-set S: full-set220; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_variable_base_offset__constant_offset_vs_variable_offset221;222 %obj = getelementptr i8, ptr %obj.base, i64 %base_offset223 %true_ptr = getelementptr i8, ptr %obj, i64 42224 %false_ptr = getelementptr i8, ptr %obj, i64 %false_off225 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr226 ret ptr %r227}228 229define ptr @pointer_select_same_object_with_variable_base_offset__variable_offset_vs_constant_offset(i1 %cond, ptr %obj.base, i64 %base_offset, i64 %true_off) {230; CHECK-LABEL: 'pointer_select_same_object_with_variable_base_offset__variable_offset_vs_constant_offset'231; CHECK-NEXT: Classifying expressions for: @pointer_select_same_object_with_variable_base_offset__variable_offset_vs_constant_offset232; CHECK-NEXT: %obj = getelementptr i8, ptr %obj.base, i64 %base_offset233; CHECK-NEXT: --> (%base_offset + %obj.base) U: full-set S: full-set234; CHECK-NEXT: %true_ptr = getelementptr i8, ptr %obj, i64 %true_off235; CHECK-NEXT: --> (%base_offset + %true_off + %obj.base) U: full-set S: full-set236; CHECK-NEXT: %false_ptr = getelementptr i8, ptr %obj, i64 42237; CHECK-NEXT: --> (42 + %base_offset + %obj.base) U: full-set S: full-set238; CHECK-NEXT: %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr239; CHECK-NEXT: --> %r U: full-set S: full-set240; CHECK-NEXT: Determining loop execution counts for: @pointer_select_same_object_with_variable_base_offset__variable_offset_vs_constant_offset241;242 %obj = getelementptr i8, ptr %obj.base, i64 %base_offset243 %true_ptr = getelementptr i8, ptr %obj, i64 %true_off244 %false_ptr = getelementptr i8, ptr %obj, i64 42245 %r = select i1 %cond, ptr %true_ptr, ptr %false_ptr246 ret ptr %r247}248