brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.0 KiB · 366cfac Raw
247 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s3 4define void @pointer.to.array.test.ult.true.due.to.first.dimension(ptr %start, ptr %high) {5; CHECK-LABEL: @pointer.to.array.test.ult.true.due.to.first.dimension(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 9, i64 38; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[ADD_PTR_I]], [[HIGH:%.*]]9; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]10; CHECK:       if.then:11; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 5, i64 012; CHECK-NEXT:    call void @use(i1 true)13; CHECK-NEXT:    ret void14; CHECK:       if.end:15; CHECK-NEXT:    ret void16;17entry:18  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 9, i64 319  %c.1 = icmp ule ptr %add.ptr.i, %high20  br i1 %c.1, label %if.then, label %if.end21 22if.then:                                          ; preds = %entry23  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 5, i64 024  %c.0 = icmp ult ptr %start.0, %high25  call void @use(i1 %c.0)26  ret void27 28if.end:                                           ; preds = %entry29  ret void30}31 32define void @pointer.to.array.test.ult.unknown.due.to.first.dimension(ptr %start, ptr %high) {33; CHECK-LABEL: @pointer.to.array.test.ult.unknown.due.to.first.dimension(34; CHECK-NEXT:  entry:35; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 5, i64 336; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[ADD_PTR_I]], [[HIGH:%.*]]37; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]38; CHECK:       if.then:39; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 10, i64 040; CHECK-NEXT:    [[C_0:%.*]] = icmp ult ptr [[START_0]], [[HIGH]]41; CHECK-NEXT:    call void @use(i1 [[C_0]])42; CHECK-NEXT:    ret void43; CHECK:       if.end:44; CHECK-NEXT:    ret void45;46entry:47  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 5, i64 348  %c.1 = icmp ule ptr %add.ptr.i, %high49  br i1 %c.1, label %if.then, label %if.end50 51if.then:                                          ; preds = %entry52  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 10, i64 053  %c.0 = icmp ult ptr %start.0, %high54  call void @use(i1 %c.0)55  ret void56 57if.end:                                           ; preds = %entry58  ret void59}60 61define void @pointer.to.array.test.ult.true.due.to.second.dimension(ptr %start, ptr %high) {62; CHECK-LABEL: @pointer.to.array.test.ult.true.due.to.second.dimension(63; CHECK-NEXT:  entry:64; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 5, i64 165; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[ADD_PTR_I]], [[HIGH:%.*]]66; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]67; CHECK:       if.then:68; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 5, i64 069; CHECK-NEXT:    call void @use(i1 true)70; CHECK-NEXT:    ret void71; CHECK:       if.end:72; CHECK-NEXT:    ret void73;74entry:75  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 5, i64 176  %c.1 = icmp ule ptr %add.ptr.i, %high77  br i1 %c.1, label %if.then, label %if.end78 79if.then:                                          ; preds = %entry80  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 5, i64 081  %c.0 = icmp ult ptr %start.0, %high82  call void @use(i1 %c.0)83  ret void84 85if.end:                                           ; preds = %entry86  ret void87}88 89define void @pointer.to.array.test.ult.unknown.to.second.dimension(ptr %start, ptr %high) {90; CHECK-LABEL: @pointer.to.array.test.ult.unknown.to.second.dimension(91; CHECK-NEXT:  entry:92; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 5, i64 093; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[ADD_PTR_I]], [[HIGH:%.*]]94; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]95; CHECK:       if.then:96; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 5, i64 197; CHECK-NEXT:    [[C_0:%.*]] = icmp ult ptr [[START_0]], [[HIGH]]98; CHECK-NEXT:    call void @use(i1 [[C_0]])99; CHECK-NEXT:    ret void100; CHECK:       if.end:101; CHECK-NEXT:    ret void102;103entry:104  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 5, i64 0105  %c.1 = icmp ule ptr %add.ptr.i, %high106  br i1 %c.1, label %if.then, label %if.end107 108if.then:                                          ; preds = %entry109  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 5, i64 1110  %c.0 = icmp ult ptr %start.0, %high111  call void @use(i1 %c.0)112  ret void113 114if.end:                                           ; preds = %entry115  ret void116}117 118define void @pointer.to.array.test.not.uge.ult(ptr %start, ptr %high) {119; CHECK-LABEL: @pointer.to.array.test.not.uge.ult(120; CHECK-NEXT:  entry:121; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 1, i64 3122; CHECK-NEXT:    [[C_1:%.*]] = icmp uge ptr [[ADD_PTR_I]], [[HIGH:%.*]]123; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]124; CHECK:       if.then:125; CHECK-NEXT:    ret void126; CHECK:       if.end:127; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 10, i64 0128; CHECK-NEXT:    [[C_0:%.*]] = icmp ult ptr [[START_0]], [[HIGH]]129; CHECK-NEXT:    call void @use(i1 [[C_0]])130; CHECK-NEXT:    ret void131;132entry:133  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 1, i64 3134  %c.1 = icmp uge ptr %add.ptr.i, %high135  br i1 %c.1, label %if.then, label %if.end136 137if.then:                                          ; preds = %entry138  ret void139 140if.end:                                           ; preds = %entry141  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 10, i64 0142  %c.0 = icmp ult ptr %start.0, %high143  call void @use(i1 %c.0)144  ret void145}146 147define void @pointer.to.array.test.not.uge.ule(ptr %start, ptr %high) {148; CHECK-LABEL: @pointer.to.array.test.not.uge.ule(149; CHECK-NEXT:  entry:150; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 1, i64 3151; CHECK-NEXT:    [[C:%.*]] = icmp uge ptr [[ADD_PTR_I]], [[HIGH:%.*]]152; CHECK-NEXT:    br i1 [[C]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]153; CHECK:       if.then:154; CHECK-NEXT:    ret void155; CHECK:       if.end:156; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 10, i64 0157; CHECK-NEXT:    [[C_0:%.*]] = icmp ule ptr [[START_0]], [[HIGH]]158; CHECK-NEXT:    call void @use(i1 [[C_0]])159; CHECK-NEXT:    [[START_1:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 2, i64 1160; CHECK-NEXT:    [[C_1:%.*]] = icmp ule ptr [[START_1]], [[HIGH]]161; CHECK-NEXT:    call void @use(i1 [[C_1]])162; CHECK-NEXT:    ret void163;164entry:165  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 1, i64 3166  %c = icmp uge ptr %add.ptr.i, %high167  br i1 %c, label %if.then, label %if.end168 169if.then:                                          ; preds = %entry170  ret void171 172if.end:                                           ; preds = %entry173  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 10, i64 0174  %c.0 = icmp ule ptr %start.0, %high175  call void @use(i1 %c.0)176  %start.1 = getelementptr inbounds [10 x i8], ptr %start, i64 2, i64 1177  %c.1 = icmp ule ptr %start.1, %high178  call void @use(i1 %c.1)179  ret void180}181 182define void @pointer.to.array.test.not.uge.ugt(ptr %start, ptr %high) {183; CHECK-LABEL: @pointer.to.array.test.not.uge.ugt(184; CHECK-NEXT:  entry:185; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 1, i64 3186; CHECK-NEXT:    [[C:%.*]] = icmp uge ptr [[ADD_PTR_I]], [[HIGH:%.*]]187; CHECK-NEXT:    br i1 [[C]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]188; CHECK:       if.then:189; CHECK-NEXT:    ret void190; CHECK:       if.end:191; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 3, i64 0192; CHECK-NEXT:    [[C_0:%.*]] = icmp ugt ptr [[START_0]], [[HIGH]]193; CHECK-NEXT:    call void @use(i1 [[C_0]])194; CHECK-NEXT:    [[START_1:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 3, i64 1195; CHECK-NEXT:    [[C_1:%.*]] = icmp ugt ptr [[START_1]], [[HIGH]]196; CHECK-NEXT:    call void @use(i1 [[C_1]])197; CHECK-NEXT:    ret void198;199entry:200  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 1, i64 3201  %c = icmp uge ptr %add.ptr.i, %high202  br i1 %c, label %if.then, label %if.end203 204if.then:                                          ; preds = %entry205  ret void206 207if.end:                                           ; preds = %entry208  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 3, i64 0209  %c.0 = icmp ugt ptr %start.0, %high210  call void @use(i1 %c.0)211  %start.1 = getelementptr inbounds [10 x i8], ptr %start, i64 3, i64 1212  %c.1 = icmp ugt ptr %start.1, %high213  call void @use(i1 %c.1)214  ret void215}216 217define void @pointer.to.array.test.not.uge.uge(ptr %start, ptr %high) {218; CHECK-LABEL: @pointer.to.array.test.not.uge.uge(219; CHECK-NEXT:  entry:220; CHECK-NEXT:    [[ADD_PTR_I:%.*]] = getelementptr inbounds [10 x i8], ptr [[START:%.*]], i64 1, i64 3221; CHECK-NEXT:    [[C_1:%.*]] = icmp uge ptr [[ADD_PTR_I]], [[HIGH:%.*]]222; CHECK-NEXT:    br i1 [[C_1]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]223; CHECK:       if.then:224; CHECK-NEXT:    ret void225; CHECK:       if.end:226; CHECK-NEXT:    [[START_0:%.*]] = getelementptr inbounds [10 x i8], ptr [[START]], i64 3, i64 0227; CHECK-NEXT:    [[C_0:%.*]] = icmp uge ptr [[START_0]], [[HIGH]]228; CHECK-NEXT:    call void @use(i1 [[C_0]])229; CHECK-NEXT:    ret void230;231entry:232  %add.ptr.i = getelementptr inbounds [10 x i8], ptr %start, i64 1, i64 3233  %c.1 = icmp uge ptr %add.ptr.i, %high234  br i1 %c.1, label %if.then, label %if.end235 236if.then:                                          ; preds = %entry237  ret void238 239if.end:                                           ; preds = %entry240  %start.0 = getelementptr inbounds [10 x i8], ptr %start, i64 3, i64 0241  %c.0 = icmp uge ptr %start.0, %high242  call void @use(i1 %c.0)243  ret void244}245 246declare void @use(i1)247