brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 0cc14d6 Raw
196 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=ipsccp -S %s | FileCheck %s3 4; A few test cases exposing crashes with the initial range implementation.5 6@global.2 = external dso_local unnamed_addr constant [25 x i8], align 17@global = internal local_unnamed_addr global i32 0, align 48@global.3 = internal local_unnamed_addr global i32 0, align 49 10define void @main(ptr %arg) {11; CHECK-LABEL: @main(12; CHECK-NEXT:  bb:13; CHECK-NEXT:    [[TMP:%.*]] = getelementptr inbounds ptr, ptr [[ARG:%.*]], i64 undef14; CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP]], align 815; CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP1]], align 116; CHECK-NEXT:    [[TMP3:%.*]] = sext i8 [[TMP2]] to i3217; CHECK-NEXT:    [[TMP4:%.*]] = icmp ne i32 [[TMP3]], 4518; CHECK-NEXT:    [[TMP5:%.*]] = select i1 [[TMP4]], i32 2, i32 419; CHECK-NEXT:    ret void20;21bb:22  %tmp = getelementptr inbounds ptr, ptr %arg, i64 undef23  %tmp1 = load ptr, ptr %tmp, align 824  %tmp2 = load i8, ptr %tmp1, align 125  %tmp3 = sext i8 %tmp2 to i3226  %tmp4 = icmp ne i32 %tmp3, 4527  %tmp5 = select i1 %tmp4, i32 2, i32 428  ret void29}30 31define void @ham() local_unnamed_addr {32; CHECK-LABEL: @ham(33; CHECK-NEXT:  bb:34; CHECK-NEXT:    br label [[BB1:%.*]]35; CHECK:       bb1:36; CHECK-NEXT:    [[TMP:%.*]] = icmp slt i32 undef, 4037; CHECK-NEXT:    br i1 [[TMP]], label [[BB2:%.*]], label [[BB4:%.*]]38; CHECK:       bb2:39; CHECK-NEXT:    br label [[BB7:%.*]]40; CHECK:       bb3:41; CHECK-NEXT:    br label [[BB4]]42; CHECK:       bb4:43; CHECK-NEXT:    [[TMP5:%.*]] = phi i64 [ 0, [[BB1]] ], [ 15, [[BB3:%.*]] ]44; CHECK-NEXT:    [[TMP6:%.*]] = add i64 [[TMP5]], add (i64 xor (i64 ptrtoint (ptr @global.2 to i64), i64 -1), i64 1)45; CHECK-NEXT:    unreachable46; CHECK:       bb7:47; CHECK-NEXT:    br label [[BB3]]48;49bb:50  br label %bb151 52bb1:                                              ; preds = %bb53  %tmp = icmp slt i32 undef, 4054  br i1 %tmp, label %bb2, label %bb455 56bb2:                                              ; preds = %bb157  br label %bb758 59bb3:                                              ; preds = %bb760  br label %bb461 62bb4:                                              ; preds = %bb3, %bb163  %tmp5 = phi i64 [ 0, %bb1 ], [ %tmp10, %bb3 ]64  %tmp6 = add i64 %tmp5, add (i64 xor (i64 ptrtoint (ptr @global.2 to i64), i64 -1), i64 1)65  unreachable66 67bb7:                                              ; preds = %bb268  %tmp8 = add i64 0, 1569  %tmp9 = add i64 %tmp8, 070  %tmp10 = add i64 %tmp9, 071  br label %bb372}73 74declare i32 @barney.4()75 76define void @wobble() {77; CHECK-LABEL: @wobble(78; CHECK-NEXT:  bb:79; CHECK-NEXT:    [[TMP:%.*]] = load i32, ptr @global, align 480; CHECK-NEXT:    store i32 [[TMP]], ptr @global.3, align 481; CHECK-NEXT:    ret void82;83bb:84  %tmp = load i32, ptr @global, align 485  store i32 %tmp, ptr @global.3, align 486  ret void87}88 89define i32 @wobble.5(i32 %arg) {90bb:91  %tmp = load i32, ptr @global.3, align 492  %tmp1 = sdiv i32 0, %tmp93  ret i32 %tmp194}95 96define void @eggs() {97; CHECK-LABEL: @eggs(98; CHECK-NEXT:  bb:99; CHECK-NEXT:    br label [[BB1:%.*]]100; CHECK:       bb1:101; CHECK-NEXT:    [[TMP:%.*]] = phi i32 [ 0, [[BB:%.*]] ], [ [[TMP2:%.*]], [[BB1]] ]102; CHECK-NEXT:    [[TMP2]] = add nsw i32 [[TMP]], 1103; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @barney.4()104; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[TMP3]], 1105; CHECK-NEXT:    br i1 [[TMP4]], label [[BB1]], label [[BB5:%.*]]106; CHECK:       bb5:107; CHECK-NEXT:    store i32 [[TMP2]], ptr @global, align 4108; CHECK-NEXT:    ret void109;110bb:111  br label %bb1112 113bb1:                                              ; preds = %bb1, %bb114  %tmp = phi i32 [ 0, %bb ], [ %tmp2, %bb1 ]115  %tmp2 = add nsw i32 %tmp, 1116  %tmp3 = call i32 @barney.4()117  %tmp4 = icmp eq i32 %tmp3, 1118  br i1 %tmp4, label %bb1, label %bb5119 120bb5:                                              ; preds = %bb1121  store i32 %tmp2, ptr @global, align 4122  ret void123}124 125declare ptr @bar(i32) local_unnamed_addr #3126 127; Function Attrs: nounwind ssp uwtable128define { i8, ptr } @struct_crash(i32 %BitWidth) local_unnamed_addr #0 align 2 {129; CHECK-LABEL: @struct_crash(130; CHECK-NEXT:  entry:131; CHECK-NEXT:    switch i32 [[BITWIDTH:%.*]], label [[IF_END:%.*]] [132; CHECK-NEXT:    i32 1, label [[CLEANUP:%.*]]133; CHECK-NEXT:    i32 8, label [[SW_BB1_I:%.*]]134; CHECK-NEXT:    ]135; CHECK:       sw.bb1.i:136; CHECK-NEXT:    br label [[CLEANUP]]137; CHECK:       if.end:138; CHECK-NEXT:    [[CALL_I:%.*]] = tail call ptr @bar(i32 [[BITWIDTH]])139; CHECK-NEXT:    br label [[CLEANUP]]140; CHECK:       cleanup:141; CHECK-NEXT:    [[V1:%.*]] = phi ptr [ [[CALL_I]], [[IF_END]] ], [ null, [[SW_BB1_I]] ], [ null, [[ENTRY:%.*]] ]142; CHECK-NEXT:    [[V2:%.*]] = phi i8 [ 0, [[IF_END]] ], [ 3, [[SW_BB1_I]] ], [ 2, [[ENTRY]] ]143; CHECK-NEXT:    [[DOTFCA_0_INSERT:%.*]] = insertvalue { i8, ptr } undef, i8 [[V2]], 0144; CHECK-NEXT:    [[DOTFCA_1_INSERT:%.*]] = insertvalue { i8, ptr } [[DOTFCA_0_INSERT]], ptr [[V1]], 1145; CHECK-NEXT:    ret { i8, ptr } [[DOTFCA_1_INSERT]]146;147entry:148  switch i32 %BitWidth, label %if.end [149  i32 1, label %cleanup150  i32 8, label %sw.bb1.i151  ]152 153sw.bb1.i:                                         ; preds = %entry154  br label %cleanup155 156if.end:                                           ; preds = %entry157  %call.i = tail call ptr @bar(i32 %BitWidth)158  br label %cleanup159 160cleanup:                                          ; preds = %entry, %sw.bb1.i, %sw.bb2.i, %sw.bb3.i, %sw.bb4.i, %sw.bb5.i, %if.end161  %v1 = phi ptr [ %call.i, %if.end ], [ null, %sw.bb1.i ], [ null, %entry ]162  %v2 = phi i8 [ 0, %if.end ], [ 3, %sw.bb1.i ], [ 2, %entry ]163  %.fca.0.insert = insertvalue { i8, ptr } undef, i8 %v2, 0164  %.fca.1.insert = insertvalue { i8, ptr } %.fca.0.insert, ptr %v1, 1165  ret { i8, ptr } %.fca.1.insert166}167 168define i64 @crash_ctpop(i1 %cond, ptr %addr) {169; CHECK-LABEL: @crash_ctpop(170; CHECK-NEXT:  entry:171; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]172; CHECK:       if.then:173; CHECK-NEXT:    ret i64 0174; CHECK:       if.else:175; CHECK-NEXT:    [[LV:%.*]] = load i32, ptr [[ADDR:%.*]], align 8176; CHECK-NEXT:    [[ANDV:%.*]] = and i32 [[LV]], 16777215177; CHECK-NEXT:    [[TRUNCV:%.*]] = zext nneg i32 [[ANDV]] to i64178; CHECK-NEXT:    [[RES:%.*]] = tail call i64 @llvm.ctpop.i64(i64 [[TRUNCV]])179; CHECK-NEXT:    ret i64 [[RES]]180;181entry:182  br i1 %cond, label %if.then, label %if.else183 184if.then:                                        ; preds = %entry185  ret i64 0186 187if.else:                                        ; preds = %entry188  %lv = load i32, ptr %addr, align 8189  %andv = and i32 %lv, 16777215190  %truncv = zext i32 %andv to i64191  %res = tail call i64 @llvm.ctpop.i64(i64 %truncv)192  ret i64 %res193}194 195declare i64 @llvm.ctpop.i64(i64)196