149 lines · plain
1; RUN: opt -mtriple=s390x-linux-gnu -mcpu=z13 -verify-memoryssa -passes='function(sroa),globalopt,function-attrs,function(simplifycfg,loop-mssa(licm),loop(simple-loop-unswitch))' %s -S | FileCheck %s2; REQUIRES: asserts3 4target datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64"5target triple = "s390x-ibm-linux"6 7@0 = internal global i32 -9, align 48@1 = internal global i64 9, align 89@g_1042 = external dso_local global [5 x i16], align 210 11declare void @dummy()12 13; CHECK-LABEL: @main()14; Function Attrs: nounwind15define dso_local void @main() {16 call void @func_1()17 unreachable18}19 20; Function Attrs: nounwind21define dso_local void @func_1() {22 %1 = alloca ptr, align 823 %2 = call signext i32 @func_2()24 %3 = icmp ne i32 %2, 025 br i1 %3, label %4, label %926 27; <label>:4: ; preds = %028 %5 = load i16, ptr @g_1042, align 2, !tbaa !129 %6 = zext i16 %5 to i6430 %7 = load i64, ptr @1, align 8, !tbaa !531 %8 = and i64 %7, %632 store i64 %8, ptr @1, align 8, !tbaa !533 call void @dummy()34 unreachable35 36; <label>:9: ; preds = %037 store ptr @0, ptr %1, align 8, !tbaa !738 br label %1039 40; <label>:10: ; preds = %23, %941 %11 = load i64, ptr @1, align 8, !tbaa !542 %12 = icmp eq i64 %11, 6553543 br i1 %12, label %13, label %1444 45; <label>:13: ; preds = %1046 store ptr null, ptr %1, align 8, !tbaa !747 br label %1448 49; <label>:14: ; preds = %13, %1050 %15 = load ptr, ptr %1, align 8, !tbaa !751 %16 = load i32, ptr %15, align 4, !tbaa !952 %17 = trunc i32 %16 to i1653 %18 = call signext i16 @safe_sub_func_int16_t_s_s(i16 signext %17)54 %19 = sext i16 %18 to i3255 %20 = icmp ne i32 %19, 056 br i1 %20, label %23, label %2157 58; <label>:21: ; preds = %1459 %22 = load volatile i8, ptr null, align 1, !tbaa !1160 br label %2361 62; <label>:23: ; preds = %21, %1463 br label %1064}65 66; Function Attrs: nounwind67declare dso_local signext i32 @func_2()68 69; Function Attrs: nounwind70define dso_local void @safe_sub_func_uint8_t_u_u() {71 ret void72}73 74; Function Attrs: nounwind75define dso_local void @safe_add_func_int64_t_s_s() {76 ret void77}78 79; Function Attrs: nounwind80define dso_local void @safe_rshift_func_int16_t_s_u() {81 ret void82}83 84; Function Attrs: nounwind85define dso_local void @safe_div_func_uint8_t_u_u() {86 ret void87}88 89; Function Attrs: nounwind90define dso_local void @safe_mul_func_uint16_t_u_u() {91 ret void92}93 94; Function Attrs: nounwind95define dso_local void @safe_mul_func_int16_t_s_s() {96 ret void97}98 99; Function Attrs: nounwind100define dso_local void @safe_div_func_int32_t_s_s() {101 ret void102}103 104; Function Attrs: nounwind105define dso_local signext i16 @safe_sub_func_int16_t_s_s(i16 signext) {106 %2 = alloca i16, align 2107 store i16 %0, ptr %2, align 2, !tbaa !1108 %3 = load i16, ptr %2, align 2, !tbaa !1109 %4 = sext i16 %3 to i32110 %5 = sub nsw i32 %4, 0111 %6 = trunc i32 %5 to i16112 ret i16 %6113}114 115; Function Attrs: nounwind116define dso_local void @safe_add_func_uint16_t_u_u() {117 ret void118}119 120; Function Attrs: nounwind121define dso_local void @safe_div_func_int8_t_s_s() {122 ret void123}124 125; Function Attrs: nounwind126define dso_local void @safe_add_func_int16_t_s_s() {127 ret void128}129 130; Function Attrs: nounwind131define dso_local void @safe_add_func_uint8_t_u_u() {132 ret void133}134 135!llvm.ident = !{!0}136 137!0 = !{!"clang version 8.0.0 (http://llvm.org/git/clang.git 7cda4756fc9713d98fd3513b8df172700f267bad) (http://llvm.org/git/llvm.git 199c0d32e96b646bd8cf6beeaf0f99f8a434b56a)"}138!1 = !{!2, !2, i64 0}139!2 = !{!"short", !3, i64 0}140!3 = !{!"omnipotent char", !4, i64 0}141!4 = !{!"Simple C/C++ TBAA"}142!5 = !{!6, !6, i64 0}143!6 = !{!"long", !3, i64 0}144!7 = !{!8, !8, i64 0}145!8 = !{!"any pointer", !3, i64 0}146!9 = !{!10, !10, i64 0}147!10 = !{!"int", !3, i64 0}148!11 = !{!3, !3, i64 0}149