brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.1 KiB · 277e611 Raw
325 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"5 6define i1 @test_outer_gep_last_index_no_overflow_all_inbounds_1(ptr %dst) {7; CHECK-LABEL: @test_outer_gep_last_index_no_overflow_all_inbounds_1(8; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds ptr, ptr [[DST:%.*]], i64 09; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds ptr, ptr [[DST]], i64 210; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST_0]], i64 1, i64 111; CHECK-NEXT:    ret i1 true12;13  %dst.0 = getelementptr inbounds ptr, ptr %dst, i64 014  %upper = getelementptr inbounds ptr, ptr %dst, i64 215  %gep.1 = getelementptr inbounds [2 x i32] , ptr %dst.0, i64 1, i64 116  %c.1 = icmp ult ptr %gep.1, %upper17  ret i1 %c.118}19 20define i1 @test_outer_gep_last_index_no_overflow_all_inbounds_2(ptr %dst) {21; CHECK-LABEL: @test_outer_gep_last_index_no_overflow_all_inbounds_2(22; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds ptr, ptr [[DST:%.*]], i64 023; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds ptr, ptr [[DST]], i64 324; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST_0]], i64 1, i64 125; CHECK-NEXT:    ret i1 true26;27  %dst.0 = getelementptr inbounds ptr, ptr %dst, i64 028  %upper = getelementptr inbounds ptr, ptr %dst, i64 329  %gep.1 = getelementptr inbounds [2 x i32] , ptr %dst.0, i64 1, i64 130  %c.1 = icmp ult ptr %gep.1, %upper31  ret i1 %c.132}33 34define i1 @test_outer_gep_last_index_overflow_all_inbounds(ptr %dst) {35; CHECK-LABEL: @test_outer_gep_last_index_overflow_all_inbounds(36; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds ptr, ptr [[DST:%.*]], i64 037; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds ptr, ptr [[DST]], i64 238; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST_0]], i64 1, i64 239; CHECK-NEXT:    ret i1 false40;41  %dst.0 = getelementptr inbounds ptr, ptr %dst, i64 042  %upper = getelementptr inbounds ptr, ptr %dst, i64 243  %gep.1 = getelementptr inbounds [2 x i32] , ptr %dst.0, i64 1, i64 244  %c = icmp ult ptr %gep.1, %upper45  ret i1 %c46}47 48define i1 @test_inner_gep_multiple_indices_ult_true_all_inbounds(ptr %dst) {49; CHECK-LABEL: @test_inner_gep_multiple_indices_ult_true_all_inbounds(50; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 051; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 252; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 153; CHECK-NEXT:    ret i1 true54;55  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 056  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 257  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 158  %c = icmp ult ptr %gep.1, %upper59  ret i1 %c60}61 62define i1 @test_inner_gep_multiple_indices_uge_true_all_inbounds(ptr %dst) {63; CHECK-LABEL: @test_inner_gep_multiple_indices_uge_true_all_inbounds(64; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 065; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 266; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 167; CHECK-NEXT:    ret i1 true68;69  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 070  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 271  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 172  %c = icmp uge ptr %gep.1, %dst.073  ret i1 %c74}75 76define i1 @test_inner_gep_multiple_indices_ult_false_all_inbounds(ptr %dst) {77; CHECK-LABEL: @test_inner_gep_multiple_indices_ult_false_all_inbounds(78; CHECK-NEXT:  entry:79; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 080; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 281; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 282; CHECK-NEXT:    ret i1 false83;84entry:85  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 086  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 287  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 288  %c = icmp ult ptr %gep.1, %upper89  ret i1 %c90}91 92define i1 @test_inner_gep_multiple_indices_uge_true_all_inbounds_2(ptr %dst) {93; CHECK-LABEL: @test_inner_gep_multiple_indices_uge_true_all_inbounds_2(94; CHECK-NEXT:  entry:95; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 096; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 297; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 298; CHECK-NEXT:    ret i1 true99;100entry:101  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0102  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 2103  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 2104  %c = icmp uge ptr %gep.1, %dst.0105  ret i1 %c106}107 108define i1 @test_inner_gep_multiple_indices_ult_true_inc_gep_all_inbounds_overflow(ptr %dst) {109; CHECK-LABEL: @test_inner_gep_multiple_indices_ult_true_inc_gep_all_inbounds_overflow(110; CHECK-NEXT:  entry:111; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 0112; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 6113; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr i32, ptr [[DST_0]], i64 2114; CHECK-NEXT:    [[C:%.*]] = icmp ult ptr [[GEP_1]], [[UPPER]]115; CHECK-NEXT:    ret i1 [[C]]116;117entry:118  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0119  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 6120  %gep.1 = getelementptr i32, ptr %dst.0, i64 2121  %c = icmp ult ptr %gep.1, %upper122  ret i1 %c123}124 125define i1 @test_inner_gep_multiple_indices_ult_true_inc_gep_not_inbounds(ptr %dst) {126; CHECK-LABEL: @test_inner_gep_multiple_indices_ult_true_inc_gep_not_inbounds(127; CHECK-NEXT:  entry:128; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 0129; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 2130; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr i32, ptr [[DST_0]], i64 1131; CHECK-NEXT:    [[C:%.*]] = icmp ult ptr [[GEP_1]], [[UPPER]]132; CHECK-NEXT:    ret i1 [[C]]133;134entry:135  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0136  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 2137  %gep.1 = getelementptr i32, ptr %dst.0, i64 1138  %c = icmp ult ptr %gep.1, %upper139  ret i1 %c140}141 142define i1 @test_inner_gep_multiple_indices_uge_true_inc_gep_not_inbounds(ptr %dst) {143; CHECK-LABEL: @test_inner_gep_multiple_indices_uge_true_inc_gep_not_inbounds(144; CHECK-NEXT:  entry:145; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 0146; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 2147; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr i32, ptr [[DST_0]], i64 1148; CHECK-NEXT:    [[C:%.*]] = icmp ult ptr [[GEP_1]], [[UPPER]]149; CHECK-NEXT:    ret i1 [[C]]150;151entry:152  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0153  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 2154  %gep.1 = getelementptr i32, ptr %dst.0, i64 1155  %c = icmp ult ptr %gep.1, %upper156  ret i1 %c157}158 159define i1 @test_inner_gep_multiple_indices_ult_false_inc_gep_not_inbounds(ptr %dst) {160; CHECK-LABEL: @test_inner_gep_multiple_indices_ult_false_inc_gep_not_inbounds(161; CHECK-NEXT:  entry:162; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 0163; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 2164; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr i32, ptr [[DST_0]], i64 2165; CHECK-NEXT:    [[C:%.*]] = icmp ult ptr [[GEP_1]], [[UPPER]]166; CHECK-NEXT:    ret i1 [[C]]167;168entry:169  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0170  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 2171  %gep.1 = getelementptr i32, ptr %dst.0, i64 2172  %c = icmp ult ptr %gep.1, %upper173  ret i1 %c174}175 176define i1 @test_inner_gep_multiple_indices_ult_true_inc_gep_not_inbounds_overflow(ptr %dst) {177; CHECK-LABEL: @test_inner_gep_multiple_indices_ult_true_inc_gep_not_inbounds_overflow(178; CHECK-NEXT:  entry:179; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 0180; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST]], i64 0, i64 5181; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr i32, ptr [[DST_0]], i64 2182; CHECK-NEXT:    [[C:%.*]] = icmp ult ptr [[GEP_1]], [[UPPER]]183; CHECK-NEXT:    ret i1 [[C]]184;185entry:186  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0187  %upper = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 5188  %gep.1 = getelementptr i32, ptr %dst.0, i64 2189  %c = icmp ult ptr %gep.1, %upper190  ret i1 %c191}192 193define i1 @test_inner_gep_multi_index(ptr %dst) {194; CHECK-LABEL: @test_inner_gep_multi_index(195; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds ptr, ptr [[DST:%.*]], i64 0196; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds ptr, ptr [[DST]], i64 2197; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST_0]], i64 1, i64 1198; CHECK-NEXT:    ret i1 true199;200  %dst.0 = getelementptr inbounds ptr, ptr %dst, i64 0201  %upper = getelementptr inbounds ptr, ptr %dst, i64 2202  %gep.1 = getelementptr inbounds [2 x i32] , ptr %dst.0, i64 1, i64 1203  %c.1 = icmp ult ptr %gep.1, %upper204  ret i1 %c.1205}206 207define i1 @test_inner_gep_multi_index_outer_gep_last_index_no_overflow_all_inbounds(ptr %dst) {208; CHECK-LABEL: @test_inner_gep_multi_index_outer_gep_last_index_no_overflow_all_inbounds(209; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 0210; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds ptr, ptr [[DST]], i64 2211; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST_0]], i64 1, i64 1212; CHECK-NEXT:    ret i1 true213;214  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 0215  %upper = getelementptr inbounds ptr, ptr %dst, i64 2216  %gep.1 = getelementptr inbounds [2 x i32] , ptr %dst.0, i64 1, i64 1217  %c.1 = icmp ult ptr %gep.1, %upper218  ret i1 %c.1219}220 221define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_1(ptr %dst) {222; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_1(223; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 0, i64 1224; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 2225; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1226; CHECK-NEXT:    ret i1 false227;228  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 0, i64 1229  %upper = getelementptr inbounds i32, ptr %dst, i64 2230  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1231  %c.1 = icmp ult ptr %gep.1, %upper232  ret i1 %c.1233}234 235define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_2(ptr %dst) {236; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_2(237; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 1, i64 0238; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 2239; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1240; CHECK-NEXT:    ret i1 false241;242  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 1, i64 0243  %upper = getelementptr inbounds i32, ptr %dst, i64 2244  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1245  %c.1 = icmp ult ptr %gep.1, %upper246  ret i1 %c.1247}248 249define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_3(ptr %dst) {250; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_3(251; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 1, i64 0252; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 3253; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1254; CHECK-NEXT:    ret i1 false255;256  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 1, i64 0257  %upper = getelementptr inbounds i32, ptr %dst, i64 3258  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1259  %c.1 = icmp ult ptr %gep.1, %upper260  ret i1 %c.1261}262 263define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_4(ptr %dst) {264; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_4(265; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 1, i64 0266; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 4267; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1268; CHECK-NEXT:    ret i1 true269;270  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 1, i64 0271  %upper = getelementptr inbounds i32, ptr %dst, i64 4272  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1273  %c.1 = icmp ult ptr %gep.1, %upper274  ret i1 %c.1275}276 277define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_5(i64 %off, ptr %dst) {278; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_5(279; CHECK-NEXT:    [[OFF_ULT:%.*]] = icmp ule i64 [[OFF:%.*]], 2280; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 2, i64 0281; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 5282; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1283; CHECK-NEXT:    ret i1 true284;285  %off.ult = icmp ule i64 %off, 2286  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 2, i64 0287  %upper = getelementptr inbounds i32, ptr %dst, i64 5288  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1289  %c.1 = icmp ule ptr %gep.1, %upper290  ret i1 %c.1291}292 293define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_6(i64 %off, ptr %dst) {294; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_6(295; CHECK-NEXT:    [[OFF_ULT:%.*]] = icmp ule i64 [[OFF:%.*]], 2296; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 2, i64 0297; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 5298; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1299; CHECK-NEXT:    ret i1 false300;301  %off.ult = icmp ule i64 %off, 2302  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 2, i64 0303  %upper = getelementptr inbounds i32, ptr %dst, i64 5304  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1305  %c.1 = icmp ult ptr %gep.1, %upper306  ret i1 %c.1307}308 309define i1 @test_inner_gep_multi_index_no_overflow_all_inbounds_7(i64 %off, ptr %dst) {310; CHECK-LABEL: @test_inner_gep_multi_index_no_overflow_all_inbounds_7(311; CHECK-NEXT:    [[OFF_ULT:%.*]] = icmp ule i64 [[OFF:%.*]], 2312; CHECK-NEXT:    [[DST_0:%.*]] = getelementptr inbounds [2 x i32], ptr [[DST:%.*]], i64 2, i64 0313; CHECK-NEXT:    [[UPPER:%.*]] = getelementptr inbounds i32, ptr [[DST]], i64 [[OFF]]314; CHECK-NEXT:    [[GEP_1:%.*]] = getelementptr inbounds i32, ptr [[DST_0]], i64 1315; CHECK-NEXT:    [[C_1:%.*]] = icmp ult ptr [[GEP_1]], [[UPPER]]316; CHECK-NEXT:    ret i1 [[C_1]]317;318  %off.ult = icmp ule i64 %off, 2319  %dst.0 = getelementptr inbounds [2 x i32], ptr %dst, i64 2, i64 0320  %upper = getelementptr inbounds i32, ptr %dst, i64 %off321  %gep.1 = getelementptr inbounds i32, ptr %dst.0, i64 1322  %c.1 = icmp ult ptr %gep.1, %upper323  ret i1 %c.1324}325