214 lines · plain
1; RUN: llc -mtriple=hexagon -O2 < %s2; REQUIRES: asserts3; Check for successful compilation.4 5target triple = "hexagon-unknown--elf"6 7%s.0 = type { ptr }8%s.1 = type { i32 }9%s.2 = type { %s.1 }10 11@g0 = global { i32, i32 } { i32 ptrtoint (ptr @f0 to i32), i32 0 }, align 412@g1 = global i32 0, align 413@g2 = global %s.0 zeroinitializer, align 414@g3 = global { i32, i32 } { i32 1, i32 0 }, align 415@g4 = global i32 0, align 416@g5 = global i32 0, align 417@g6 = global i32 0, align 418@g7 = private unnamed_addr constant [53 x i8] c"REF: ISO/IEC 14882:1998, 8.2.3 Pointers to members.\0A\00", align 119@g8 = private unnamed_addr constant [6 x i8] c"%s\0A%s\00", align 120@g9 = private unnamed_addr constant [43 x i8] c"Can we assign a pointer to member function\00", align 121@g10 = private unnamed_addr constant [49 x i8] c" to a function member of the second base class?\0A\00", align 122@g11 = external global i3223@g12 = private unnamed_addr constant [46 x i8] c"Can we assign a pointer to member to a member\00", align 124@g13 = private unnamed_addr constant [29 x i8] c" of the second base class?\0A\00", align 125@g14 = private unnamed_addr constant [7 x i8] c"%s\0A%s\0A\00", align 126@g15 = private unnamed_addr constant [51 x i8] c"Testing dereferencing a pointer to member function\00", align 127@g16 = private unnamed_addr constant [24 x i8] c"in a complex expression\00", align 128@g17 = linkonce_odr unnamed_addr constant [3 x ptr] [ptr null, ptr @g20, ptr @f9]29@g18 = external global ptr30@g19 = linkonce_odr constant [3 x i8] c"1S\00"31@g20 = linkonce_odr constant { ptr, ptr } { ptr getelementptr inbounds (ptr, ptr @g18, i32 2), ptr @g19 }32 33; Function Attrs: nounwind readnone34define linkonce_odr i32 @f0(ptr nocapture readnone %a0) #0 align 2 {35b0:36 ret i32 1137}38 39; Function Attrs: nounwind readnone40define ptr @f1() #0 {41b0:42 ret ptr @g243}44 45define internal fastcc void @f2() {46b0:47 %v0 = load i32, ptr @g5, align 4, !tbaa !048 %v1 = add nsw i32 %v0, 549 store i32 %v1, ptr @g5, align 4, !tbaa !050 %v2 = load { i32, i32 }, ptr @g3, align 4, !tbaa !451 %v3 = extractvalue { i32, i32 } %v2, 152 %v4 = getelementptr inbounds i8, ptr @g2, i32 %v353 %v6 = extractvalue { i32, i32 } %v2, 054 %v7 = and i32 %v6, 155 %v8 = icmp eq i32 %v7, 056 br i1 %v8, label %b2, label %b157 58b1: ; preds = %b059 %v10 = load ptr, ptr %v4, align 4, !tbaa !560 %v11 = add i32 %v6, -161 %v12 = getelementptr i8, ptr %v10, i32 %v1162 %v14 = load ptr, ptr %v12, align 463 br label %b364 65b2: ; preds = %b066 %v15 = inttoptr i32 %v6 to ptr67 br label %b368 69b3: ; preds = %b2, %b170 %v16 = phi ptr [ %v14, %b1 ], [ %v15, %b2 ]71 %v17 = tail call i32 %v16(ptr %v4)72 store i32 %v17, ptr @g6, align 4, !tbaa !073 ret void74}75 76; Function Attrs: nounwind readnone77define i32 @f3() #0 {78b0:79 %v0 = alloca %s.2, align 480 %v1 = alloca %s.2, align 481 tail call void @f4()82 tail call void @f5()83 tail call void (ptr, ...) @f6(ptr @g7)84 tail call void (ptr, ...) @f6(ptr @g8, ptr @g9, ptr @g10)85 %v2 = load { i32, i32 }, ptr @g0, align 4, !tbaa !486 %v3 = extractvalue { i32, i32 } %v2, 187 %v5 = getelementptr inbounds i8, ptr %v0, i32 %v388 %v7 = extractvalue { i32, i32 } %v2, 089 %v8 = and i32 %v7, 190 %v9 = icmp eq i32 %v8, 091 br i1 %v9, label %b1, label %b292 93b1: ; preds = %b094 %v10 = inttoptr i32 %v7 to ptr95 br label %b296 97b2: ; preds = %b1, %b098 %v11 = phi ptr [ %v10, %b1 ], [ undef, %b0 ]99 %v12 = call i32 %v11(ptr %v5)100 %v13 = icmp eq i32 %v12, 11101 br i1 %v13, label %b4, label %b3102 103b3: ; preds = %b2104 store i32 1, ptr @g11, align 4, !tbaa !0105 br label %b4106 107b4: ; preds = %b3, %b2108 %v14 = call i32 @f7()109 call void @f5()110 call void (ptr, ...) @f6(ptr @g8, ptr @g12, ptr @g13)111 store i32 11, ptr %v1, align 4, !tbaa !7112 %v16 = load i32, ptr @g1, align 4, !tbaa !4113 %v18 = getelementptr inbounds i8, ptr %v1, i32 %v16114 %v20 = load i32, ptr %v18, align 4, !tbaa !0115 %v21 = icmp eq i32 %v20, 11116 br i1 %v21, label %b6, label %b5117 118b5: ; preds = %b4119 store i32 1, ptr @g11, align 4, !tbaa !0120 br label %b6121 122b6: ; preds = %b5, %b4123 %v22 = call i32 @f7()124 call void @f5()125 call void (ptr, ...) @f6(ptr @g14, ptr @g15, ptr @g16)126 %v23 = load i32, ptr @g4, align 4, !tbaa !0127 %v24 = icmp eq i32 %v23, 11128 br i1 %v24, label %b8, label %b7129 130b7: ; preds = %b6131 store i32 1, ptr @g11, align 4, !tbaa !0132 br label %b8133 134b8: ; preds = %b7, %b6135 %v25 = call i32 @f7()136 call void @f5()137 call void (ptr, ...) @f6(ptr @g14, ptr @g15, ptr @g16)138 %v26 = load i32, ptr @g6, align 4, !tbaa !0139 %v27 = icmp eq i32 %v26, 11140 br i1 %v27, label %b10, label %b9141 142b9: ; preds = %b8143 store i32 1, ptr @g11, align 4, !tbaa !0144 br label %b10145 146b10: ; preds = %b9, %b8147 %v28 = call i32 @f7()148 %v29 = call i32 @f8(i32 4)149 ret i32 %v29150}151 152; Function Attrs: nounwind readnone153declare void @f4() #0154 155; Function Attrs: nounwind readnone156declare void @f5() #0157 158; Function Attrs: nounwind readnone159declare void @f6(ptr, ...) #0160 161; Function Attrs: nounwind readnone162declare i32 @f7() #0163 164; Function Attrs: nounwind readnone165declare i32 @f8(i32) #0166 167; Function Attrs: nounwind readnone168define linkonce_odr i32 @f9(ptr nocapture readnone %a0) unnamed_addr #0 align 2 {169b0:170 ret i32 11171}172 173define internal void @f10() {174b0:175 store ptr getelementptr inbounds ([3 x ptr], ptr @g17, i32 0, i32 2), ptr @g2, align 4, !tbaa !5176 %v0 = load { i32, i32 }, ptr @g3, align 4, !tbaa !4177 %v1 = extractvalue { i32, i32 } %v0, 1178 %v2 = getelementptr inbounds i8, ptr @g2, i32 %v1179 %v4 = extractvalue { i32, i32 } %v0, 0180 %v5 = and i32 %v4, 1181 %v6 = icmp eq i32 %v5, 0182 br i1 %v6, label %b2, label %b1183 184b1: ; preds = %b0185 %v8 = load ptr, ptr %v2, align 4, !tbaa !5186 %v9 = add i32 %v4, -1187 %v10 = getelementptr i8, ptr %v8, i32 %v9188 %v12 = load ptr, ptr %v10, align 4189 br label %b3190 191b2: ; preds = %b0192 %v13 = inttoptr i32 %v4 to ptr193 br label %b3194 195b3: ; preds = %b2, %b1196 %v14 = phi ptr [ %v12, %b1 ], [ %v13, %b2 ]197 %v15 = tail call i32 %v14(ptr %v2)198 store i32 %v15, ptr @g4, align 4, !tbaa !0199 tail call fastcc void @f2()200 ret void201}202 203attributes #0 = { nounwind readnone }204 205!0 = !{!1, !1, i64 0}206!1 = !{!"int", !2, i64 0}207!2 = !{!"omnipotent char", !3, i64 0}208!3 = !{!"Simple C/C++ TBAA"}209!4 = !{!2, !2, i64 0}210!5 = !{!6, !6, i64 0}211!6 = !{!"vtable pointer", !3, i64 0}212!7 = !{!8, !1, i64 0}213!8 = !{!"_ZTS2B2", !1, i64 0}214