1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py 2; RUN: opt < %s --data-layout="p:64:64:64:64" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR64_IDX64 %s 3; RUN: opt < %s --data-layout="p:64:64:64:32" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR64_IDX32 %s 4; RUN: opt < %s --data-layout="p:16:16:16:16" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR16_IDX16 %s 5 6@global = external hidden global [0 x i8] 7 8declare void @use16(i16) 9 10define hidden ptr @trunc_ptr_to_i64(ptr %arg, ptr %arg10) { 11; PTR64_IDX64-LABEL: 'trunc_ptr_to_i64' 12; PTR64_IDX64-NEXT: Classifying expressions for: @trunc_ptr_to_i64 13; PTR64_IDX64-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 14; PTR64_IDX64-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 15; PTR64_IDX64-NEXT: %tmp12 = getelementptr i8, ptr %arg, i64 ptrtoint (ptr @global to i64) 16; PTR64_IDX64-NEXT: --> ((ptrtoint ptr @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i64) + %arg) LoopDispositions: { %bb11: Invariant } 17; PTR64_IDX64-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 18; PTR64_IDX64-NEXT: --> ((ptrtoint ptr @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i64) + %arg) LoopDispositions: { %bb11: Invariant } 19; PTR64_IDX64-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 20; PTR64_IDX64-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 21; PTR64_IDX64-NEXT: %tmp18 = add i32 %tmp, 2 22; PTR64_IDX64-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 23; PTR64_IDX64-NEXT: Determining loop execution counts for: @trunc_ptr_to_i64 24; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable backedge-taken count. 25; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 26; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 27; 28; PTR64_IDX32-LABEL: 'trunc_ptr_to_i64' 29; PTR64_IDX32-NEXT: Classifying expressions for: @trunc_ptr_to_i64 30; PTR64_IDX32-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 31; PTR64_IDX32-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 32; PTR64_IDX32-NEXT: %tmp12 = getelementptr i8, ptr %arg, i64 ptrtoint (ptr @global to i64) 33; PTR64_IDX32-NEXT: --> ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant } 34; PTR64_IDX32-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 35; PTR64_IDX32-NEXT: --> ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant } 36; PTR64_IDX32-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 37; PTR64_IDX32-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 38; PTR64_IDX32-NEXT: %tmp18 = add i32 %tmp, 2 39; PTR64_IDX32-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 40; PTR64_IDX32-NEXT: Determining loop execution counts for: @trunc_ptr_to_i64 41; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable backedge-taken count. 42; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 43; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 44; 45; PTR16_IDX16-LABEL: 'trunc_ptr_to_i64' 46; PTR16_IDX16-NEXT: Classifying expressions for: @trunc_ptr_to_i64 47; PTR16_IDX16-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 48; PTR16_IDX16-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 49; PTR16_IDX16-NEXT: %tmp12 = getelementptr i8, ptr %arg, i64 ptrtoint (ptr @global to i64) 50; PTR16_IDX16-NEXT: --> ((ptrtoint ptr @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i16) + %arg) LoopDispositions: { %bb11: Invariant } 51; PTR16_IDX16-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 52; PTR16_IDX16-NEXT: --> ((ptrtoint ptr @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i16) + %arg) LoopDispositions: { %bb11: Invariant } 53; PTR16_IDX16-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 54; PTR16_IDX16-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 55; PTR16_IDX16-NEXT: %tmp18 = add i32 %tmp, 2 56; PTR16_IDX16-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 57; PTR16_IDX16-NEXT: Determining loop execution counts for: @trunc_ptr_to_i64 58; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable backedge-taken count. 59; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 60; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 61; 62bb: 63 br label %bb11 64 65bb11: ; preds = %bb17, %bb 66 %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 67 %tmp12 = getelementptr i8, ptr %arg, i64 ptrtoint (ptr @global to i64) 68 %tmp13 = bitcast ptr %tmp12 to ptr 69 %tmp14 = load i32, ptr %tmp13, align 4 70 %tmp15 = icmp eq i32 %tmp14, 6 71 br i1 %tmp15, label %bb16, label %bb17 72 73bb16: ; preds = %bb11 74 ret ptr %arg10 75 76bb17: ; preds = %bb11 77 %tmp18 = add i32 %tmp, 2 78 br label %bb11 79} 80define hidden ptr @trunc_ptr_to_i32(ptr %arg, ptr %arg10) { 81; PTR64_IDX64-LABEL: 'trunc_ptr_to_i32' 82; PTR64_IDX64-NEXT: Classifying expressions for: @trunc_ptr_to_i32 83; PTR64_IDX64-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 84; PTR64_IDX64-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 85; PTR64_IDX64-NEXT: %tmp12 = getelementptr i8, ptr %arg, i32 ptrtoint (ptr @global to i32) 86; PTR64_IDX64-NEXT: --> ((sext i32 (trunc i64 (ptrtoint ptr @global to i64) to i32) to i64) + %arg) U: full-set S: full-set Exits: ((sext i32 (trunc i64 (ptrtoint ptr @global to i64) to i32) to i64) + %arg) LoopDispositions: { %bb11: Invariant } 87; PTR64_IDX64-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 88; PTR64_IDX64-NEXT: --> ((sext i32 (trunc i64 (ptrtoint ptr @global to i64) to i32) to i64) + %arg) U: full-set S: full-set Exits: ((sext i32 (trunc i64 (ptrtoint ptr @global to i64) to i32) to i64) + %arg) LoopDispositions: { %bb11: Invariant } 89; PTR64_IDX64-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 90; PTR64_IDX64-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 91; PTR64_IDX64-NEXT: %tmp18 = add i32 %tmp, 2 92; PTR64_IDX64-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 93; PTR64_IDX64-NEXT: Determining loop execution counts for: @trunc_ptr_to_i32 94; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable backedge-taken count. 95; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 96; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 97; 98; PTR64_IDX32-LABEL: 'trunc_ptr_to_i32' 99; PTR64_IDX32-NEXT: Classifying expressions for: @trunc_ptr_to_i32 100; PTR64_IDX32-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 101; PTR64_IDX32-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 102; PTR64_IDX32-NEXT: %tmp12 = getelementptr i8, ptr %arg, i32 ptrtoint (ptr @global to i32) 103; PTR64_IDX32-NEXT: --> (ptrtoint (ptr @global to i32) + %arg) U: full-set S: full-set Exits: (ptrtoint (ptr @global to i32) + %arg) LoopDispositions: { %bb11: Invariant } 104; PTR64_IDX32-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 105; PTR64_IDX32-NEXT: --> (ptrtoint (ptr @global to i32) + %arg) U: full-set S: full-set Exits: (ptrtoint (ptr @global to i32) + %arg) LoopDispositions: { %bb11: Invariant } 106; PTR64_IDX32-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 107; PTR64_IDX32-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 108; PTR64_IDX32-NEXT: %tmp18 = add i32 %tmp, 2 109; PTR64_IDX32-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 110; PTR64_IDX32-NEXT: Determining loop execution counts for: @trunc_ptr_to_i32 111; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable backedge-taken count. 112; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 113; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 114; 115; PTR16_IDX16-LABEL: 'trunc_ptr_to_i32' 116; PTR16_IDX16-NEXT: Classifying expressions for: @trunc_ptr_to_i32 117; PTR16_IDX16-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 118; PTR16_IDX16-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 119; PTR16_IDX16-NEXT: %tmp12 = getelementptr i8, ptr %arg, i32 ptrtoint (ptr @global to i32) 120; PTR16_IDX16-NEXT: --> ((ptrtoint ptr @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i16) + %arg) LoopDispositions: { %bb11: Invariant } 121; PTR16_IDX16-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 122; PTR16_IDX16-NEXT: --> ((ptrtoint ptr @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i16) + %arg) LoopDispositions: { %bb11: Invariant } 123; PTR16_IDX16-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 124; PTR16_IDX16-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 125; PTR16_IDX16-NEXT: %tmp18 = add i32 %tmp, 2 126; PTR16_IDX16-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 127; PTR16_IDX16-NEXT: Determining loop execution counts for: @trunc_ptr_to_i32 128; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable backedge-taken count. 129; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 130; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 131; 132bb: 133 br label %bb11 134 135bb11: ; preds = %bb17, %bb 136 %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 137 %tmp12 = getelementptr i8, ptr %arg, i32 ptrtoint (ptr @global to i32) 138 %tmp13 = bitcast ptr %tmp12 to ptr 139 %tmp14 = load i32, ptr %tmp13, align 4 140 %tmp15 = icmp eq i32 %tmp14, 6 141 br i1 %tmp15, label %bb16, label %bb17 142 143bb16: ; preds = %bb11 144 ret ptr %arg10 145 146bb17: ; preds = %bb11 147 %tmp18 = add i32 %tmp, 2 148 br label %bb11 149} 150define hidden ptr @trunc_ptr_to_i128(ptr %arg, ptr %arg10) { 151; PTR64_IDX64-LABEL: 'trunc_ptr_to_i128' 152; PTR64_IDX64-NEXT: Classifying expressions for: @trunc_ptr_to_i128 153; PTR64_IDX64-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 154; PTR64_IDX64-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 155; PTR64_IDX64-NEXT: %tmp12 = getelementptr i8, ptr %arg, i128 ptrtoint (ptr @global to i128) 156; PTR64_IDX64-NEXT: --> ((ptrtoint ptr @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i64) + %arg) LoopDispositions: { %bb11: Invariant } 157; PTR64_IDX64-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 158; PTR64_IDX64-NEXT: --> ((ptrtoint ptr @global to i64) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i64) + %arg) LoopDispositions: { %bb11: Invariant } 159; PTR64_IDX64-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 160; PTR64_IDX64-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 161; PTR64_IDX64-NEXT: %tmp18 = add i32 %tmp, 2 162; PTR64_IDX64-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 163; PTR64_IDX64-NEXT: Determining loop execution counts for: @trunc_ptr_to_i128 164; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable backedge-taken count. 165; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 166; PTR64_IDX64-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 167; 168; PTR64_IDX32-LABEL: 'trunc_ptr_to_i128' 169; PTR64_IDX32-NEXT: Classifying expressions for: @trunc_ptr_to_i128 170; PTR64_IDX32-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 171; PTR64_IDX32-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 172; PTR64_IDX32-NEXT: %tmp12 = getelementptr i8, ptr %arg, i128 ptrtoint (ptr @global to i128) 173; PTR64_IDX32-NEXT: --> ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant } 174; PTR64_IDX32-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 175; PTR64_IDX32-NEXT: --> ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) U: full-set S: full-set Exits: ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant } 176; PTR64_IDX32-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 177; PTR64_IDX32-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 178; PTR64_IDX32-NEXT: %tmp18 = add i32 %tmp, 2 179; PTR64_IDX32-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 180; PTR64_IDX32-NEXT: Determining loop execution counts for: @trunc_ptr_to_i128 181; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable backedge-taken count. 182; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 183; PTR64_IDX32-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 184; 185; PTR16_IDX16-LABEL: 'trunc_ptr_to_i128' 186; PTR16_IDX16-NEXT: Classifying expressions for: @trunc_ptr_to_i128 187; PTR16_IDX16-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 188; PTR16_IDX16-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 189; PTR16_IDX16-NEXT: %tmp12 = getelementptr i8, ptr %arg, i128 ptrtoint (ptr @global to i128) 190; PTR16_IDX16-NEXT: --> ((ptrtoint ptr @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i16) + %arg) LoopDispositions: { %bb11: Invariant } 191; PTR16_IDX16-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr 192; PTR16_IDX16-NEXT: --> ((ptrtoint ptr @global to i16) + %arg) U: full-set S: full-set Exits: ((ptrtoint ptr @global to i16) + %arg) LoopDispositions: { %bb11: Invariant } 193; PTR16_IDX16-NEXT: %tmp14 = load i32, ptr %tmp13, align 4 194; PTR16_IDX16-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant } 195; PTR16_IDX16-NEXT: %tmp18 = add i32 %tmp, 2 196; PTR16_IDX16-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable } 197; PTR16_IDX16-NEXT: Determining loop execution counts for: @trunc_ptr_to_i128 198; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable backedge-taken count. 199; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count. 200; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count. 201; 202bb: 203 br label %bb11 204 205bb11: ; preds = %bb17, %bb 206 %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ] 207 %tmp12 = getelementptr i8, ptr %arg, i128 ptrtoint (ptr @global to i128) 208 %tmp13 = bitcast ptr %tmp12 to ptr 209 %tmp14 = load i32, ptr %tmp13, align 4 210 %tmp15 = icmp eq i32 %tmp14, 6 211 br i1 %tmp15, label %bb16, label %bb17 212 213bb16: ; preds = %bb11 214 ret ptr %arg10 215 216bb17: ; preds = %bb11 217 %tmp18 = add i32 %tmp, 2 218 br label %bb11 219} 220 221define void @zext_ptr_to_i32(i32 %arg, i32 %arg6) { 222; PTR64_IDX64-LABEL: 'zext_ptr_to_i32' 223; PTR64_IDX64-NEXT: Classifying expressions for: @zext_ptr_to_i32 224; PTR64_IDX64-NEXT: %tmp = sub i32 %arg, ptrtoint (ptr @global to i32) 225; PTR64_IDX64-NEXT: --> ((-1 * (trunc i64 (ptrtoint ptr @global to i64) to i32)) + %arg) U: full-set S: full-set Exits: ((-1 * (trunc i64 (ptrtoint ptr @global to i64) to i32)) + %arg) LoopDispositions: { %bb7: Invariant } 226; PTR64_IDX64-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1 227; PTR64_IDX64-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant } 228; PTR64_IDX64-NEXT: Determining loop execution counts for: @zext_ptr_to_i32 229; PTR64_IDX64-NEXT: Loop %bb7: Unpredictable backedge-taken count. 230; PTR64_IDX64-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count. 231; PTR64_IDX64-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count. 232; 233; PTR64_IDX32-LABEL: 'zext_ptr_to_i32' 234; PTR64_IDX32-NEXT: Classifying expressions for: @zext_ptr_to_i32 235; PTR64_IDX32-NEXT: %tmp = sub i32 %arg, ptrtoint (ptr @global to i32) 236; PTR64_IDX32-NEXT: --> ((-1 * ptrtoint (ptr @global to i32)) + %arg) U: full-set S: full-set Exits: ((-1 * ptrtoint (ptr @global to i32)) + %arg) LoopDispositions: { %bb7: Invariant } 237; PTR64_IDX32-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1 238; PTR64_IDX32-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant } 239; PTR64_IDX32-NEXT: Determining loop execution counts for: @zext_ptr_to_i32 240; PTR64_IDX32-NEXT: Loop %bb7: Unpredictable backedge-taken count. 241; PTR64_IDX32-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count. 242; PTR64_IDX32-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count. 243; 244; PTR16_IDX16-LABEL: 'zext_ptr_to_i32' 245; PTR16_IDX16-NEXT: Classifying expressions for: @zext_ptr_to_i32 246; PTR16_IDX16-NEXT: %tmp = sub i32 %arg, ptrtoint (ptr @global to i32) 247; PTR16_IDX16-NEXT: --> ((-1 * (zext i16 (ptrtoint ptr @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (zext i16 (ptrtoint ptr @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant } 248; PTR16_IDX16-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1 249; PTR16_IDX16-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant } 250; PTR16_IDX16-NEXT: Determining loop execution counts for: @zext_ptr_to_i32 251; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable backedge-taken count. 252; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count. 253; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count. 254; 255bb: 256 br label %bb7 257 258bb7: ; preds = %bb7, %bb 259 %tmp = sub i32 %arg, ptrtoint (ptr @global to i32) 260 %tmp8 = icmp eq i32 %tmp, %arg6 261 %tmp9 = select i1 %tmp8, i16 0, i16 1 262 call void @use16(i16 %tmp9) 263 br i1 %tmp8, label %bb7, label %bb10 264 265bb10: ; preds = %bb7 266 ret void 267} 268 269define void @sext_to_i32(i32 %arg, i32 %arg6) { 270; PTR64_IDX64-LABEL: 'sext_to_i32' 271; PTR64_IDX64-NEXT: Classifying expressions for: @sext_to_i32 272; PTR64_IDX64-NEXT: %ext = sext i16 ptrtoint (ptr @global to i16) to i32 273; PTR64_IDX64-NEXT: --> (sext i16 (trunc i64 (ptrtoint ptr @global to i64) to i16) to i32) U: [-32768,32768) S: [-32768,32768) Exits: (sext i16 (trunc i64 (ptrtoint ptr @global to i64) to i16) to i32) LoopDispositions: { %bb7: Invariant } 274; PTR64_IDX64-NEXT: %tmp = sub i32 %arg, %ext 275; PTR64_IDX64-NEXT: --> ((-1 * (sext i16 (trunc i64 (ptrtoint ptr @global to i64) to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 (trunc i64 (ptrtoint ptr @global to i64) to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant } 276; PTR64_IDX64-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1 277; PTR64_IDX64-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant } 278; PTR64_IDX64-NEXT: Determining loop execution counts for: @sext_to_i32 279; PTR64_IDX64-NEXT: Loop %bb7: Unpredictable backedge-taken count. 280; PTR64_IDX64-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count. 281; PTR64_IDX64-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count. 282; 283; PTR64_IDX32-LABEL: 'sext_to_i32' 284; PTR64_IDX32-NEXT: Classifying expressions for: @sext_to_i32 285; PTR64_IDX32-NEXT: %ext = sext i16 ptrtoint (ptr @global to i16) to i32 286; PTR64_IDX32-NEXT: --> (sext i16 ptrtoint (ptr @global to i16) to i32) U: [-32768,32768) S: [-32768,32768) Exits: (sext i16 ptrtoint (ptr @global to i16) to i32) LoopDispositions: { %bb7: Invariant } 287; PTR64_IDX32-NEXT: %tmp = sub i32 %arg, %ext 288; PTR64_IDX32-NEXT: --> ((-1 * (sext i16 ptrtoint (ptr @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 ptrtoint (ptr @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant } 289; PTR64_IDX32-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1 290; PTR64_IDX32-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant } 291; PTR64_IDX32-NEXT: Determining loop execution counts for: @sext_to_i32 292; PTR64_IDX32-NEXT: Loop %bb7: Unpredictable backedge-taken count. 293; PTR64_IDX32-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count. 294; PTR64_IDX32-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count. 295; 296; PTR16_IDX16-LABEL: 'sext_to_i32' 297; PTR16_IDX16-NEXT: Classifying expressions for: @sext_to_i32 298; PTR16_IDX16-NEXT: %ext = sext i16 ptrtoint (ptr @global to i16) to i32 299; PTR16_IDX16-NEXT: --> (sext i16 (ptrtoint ptr @global to i16) to i32) U: [-32768,32768) S: [-32768,32768) Exits: (sext i16 (ptrtoint ptr @global to i16) to i32) LoopDispositions: { %bb7: Invariant } 300; PTR16_IDX16-NEXT: %tmp = sub i32 %arg, %ext 301; PTR16_IDX16-NEXT: --> ((-1 * (sext i16 (ptrtoint ptr @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 (ptrtoint ptr @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant } 302; PTR16_IDX16-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1 303; PTR16_IDX16-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant } 304; PTR16_IDX16-NEXT: Determining loop execution counts for: @sext_to_i32 305; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable backedge-taken count. 306; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count. 307; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count. 308; 309bb: 310 br label %bb7 311 312bb7: ; preds = %bb7, %bb 313 %ext = sext i16 ptrtoint (ptr @global to i16) to i32 314 %tmp = sub i32 %arg, %ext 315 %tmp8 = icmp eq i32 %tmp, %arg6 316 %tmp9 = select i1 %tmp8, i16 0, i16 1 317 call void @use16(i16 %tmp9) 318 br i1 %tmp8, label %bb7, label %bb10 319 320bb10: ; preds = %bb7 321 ret void 322} 323 324define i64 @sext_like_noop(i32 %n) { 325; PTR64_IDX64-LABEL: 'sext_like_noop' 326; PTR64_IDX64-NEXT: Classifying expressions for: @sext_like_noop 327; PTR64_IDX64-NEXT: %ii = sext i32 %i to i64 328; PTR64_IDX64-NEXT: --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (sext i32 (-1 + (trunc i64 (ptrtoint ptr @sext_like_noop to i64) to i32)) to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) 329; PTR64_IDX64-NEXT: %div = sdiv i64 55555, %ii 330; PTR64_IDX64-NEXT: --> %div U: full-set S: full-set 331; PTR64_IDX64-NEXT: %i = phi i32 [ %inc, %for.body ], [ 1, %entry ] 332; PTR64_IDX64-NEXT: --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + (trunc i64 (ptrtoint ptr @sext_like_noop to i64) to i32)) LoopDispositions: { %for.body: Computable } 333; PTR64_IDX64-NEXT: %inc = add nuw i32 %i, 1 334; PTR64_IDX64-NEXT: --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: (trunc i64 (ptrtoint ptr @sext_like_noop to i64) to i32) LoopDispositions: { %for.body: Computable } 335; PTR64_IDX64-NEXT: Determining loop execution counts for: @sext_like_noop 336; PTR64_IDX64-NEXT: Loop %for.body: backedge-taken count is (-2 + (trunc i64 (ptrtoint ptr @sext_like_noop to i64) to i32)) 337; PTR64_IDX64-NEXT: Loop %for.body: constant max backedge-taken count is i32 -1 338; PTR64_IDX64-NEXT: Loop %for.body: symbolic max backedge-taken count is (-2 + (trunc i64 (ptrtoint ptr @sext_like_noop to i64) to i32)) 339; PTR64_IDX64-NEXT: Loop %for.body: Trip multiple is 1 340; 341; PTR64_IDX32-LABEL: 'sext_like_noop' 342; PTR64_IDX32-NEXT: Classifying expressions for: @sext_like_noop 343; PTR64_IDX32-NEXT: %ii = sext i32 %i to i64 344; PTR64_IDX32-NEXT: --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (sext i32 (-1 + ptrtoint (ptr @sext_like_noop to i32)) to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) 345; PTR64_IDX32-NEXT: %div = sdiv i64 55555, %ii 346; PTR64_IDX32-NEXT: --> %div U: full-set S: full-set 347; PTR64_IDX32-NEXT: %i = phi i32 [ %inc, %for.body ], [ 1, %entry ] 348; PTR64_IDX32-NEXT: --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + ptrtoint (ptr @sext_like_noop to i32)) LoopDispositions: { %for.body: Computable } 349; PTR64_IDX32-NEXT: %inc = add nuw i32 %i, 1 350; PTR64_IDX32-NEXT: --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: ptrtoint (ptr @sext_like_noop to i32) LoopDispositions: { %for.body: Computable } 351; PTR64_IDX32-NEXT: Determining loop execution counts for: @sext_like_noop 352; PTR64_IDX32-NEXT: Loop %for.body: backedge-taken count is (-2 + ptrtoint (ptr @sext_like_noop to i32)) 353; PTR64_IDX32-NEXT: Loop %for.body: constant max backedge-taken count is i32 -1 354; PTR64_IDX32-NEXT: Loop %for.body: symbolic max backedge-taken count is (-2 + ptrtoint (ptr @sext_like_noop to i32)) 355; PTR64_IDX32-NEXT: Loop %for.body: Trip multiple is 1 356; 357; PTR16_IDX16-LABEL: 'sext_like_noop' 358; PTR16_IDX16-NEXT: Classifying expressions for: @sext_like_noop 359; PTR16_IDX16-NEXT: %ii = sext i32 %i to i64 360; PTR16_IDX16-NEXT: --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (-1 + (zext i16 (ptrtoint ptr @sext_like_noop to i16) to i64))<nsw> U: [-1,65535) S: [-1,65535) 361; PTR16_IDX16-NEXT: %div = sdiv i64 55555, %ii 362; PTR16_IDX16-NEXT: --> %div U: full-set S: full-set 363; PTR16_IDX16-NEXT: %i = phi i32 [ %inc, %for.body ], [ 1, %entry ] 364; PTR16_IDX16-NEXT: --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + (zext i16 (ptrtoint ptr @sext_like_noop to i16) to i32))<nsw> LoopDispositions: { %for.body: Computable } 365; PTR16_IDX16-NEXT: %inc = add nuw i32 %i, 1 366; PTR16_IDX16-NEXT: --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: (zext i16 (ptrtoint ptr @sext_like_noop to i16) to i32) LoopDispositions: { %for.body: Computable } 367; PTR16_IDX16-NEXT: Determining loop execution counts for: @sext_like_noop 368; PTR16_IDX16-NEXT: Loop %for.body: backedge-taken count is (-2 + (zext i16 (ptrtoint ptr @sext_like_noop to i16) to i32))<nsw> 369; PTR16_IDX16-NEXT: Loop %for.body: constant max backedge-taken count is i32 -1 370; PTR16_IDX16-NEXT: Loop %for.body: symbolic max backedge-taken count is (-2 + (zext i16 (ptrtoint ptr @sext_like_noop to i16) to i32))<nsw> 371; PTR16_IDX16-NEXT: Loop %for.body: Trip multiple is 1 372; 373entry: 374 %cmp6 = icmp sgt i32 %n, 1 375 br label %for.body 376 377for.cond.cleanup: 378 %ii = sext i32 %i to i64 379 %div = sdiv i64 55555, %ii 380 ret i64 %div 381 382for.body: 383 %i = phi i32 [ %inc, %for.body ], [ 1, %entry ] 384 %inc = add nuw i32 %i, 1 385 %exitcond = icmp eq i32 %inc, ptrtoint (ptr @sext_like_noop to i32) 386 br i1 %exitcond, label %for.cond.cleanup, label %for.body 387} 388declare void @f(i64) 389