Created
August 18, 2013 12:33
-
-
Save geoff-nixon/6261433 to your computer and use it in GitHub Desktop.
gmp 5.1.2: tests/mpz/t-get_d_2exp.o LLVM IR (clang -O4/-flto/-emit-llvm)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; ModuleID = 't-get_d_2exp.o' | |
| target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" | |
| target triple = "x86_64-apple-macosx10.8.0" | |
| %struct.__gmp_randstate_struct = type { [1 x %struct.__mpz_struct], i32, %union.anon } | |
| %struct.__mpz_struct = type { i32, i32, i64* } | |
| %union.anon = type { i8* } | |
| @mp_trace_base = external global i32 ; [#uses=1 type=i32*] | |
| @__gmp_rands_initialized = external global i8 ; [#uses=2 type=i8*] | |
| @__gmp_rands = external global [1 x %struct.__gmp_randstate_struct] ; [#uses=1 type=[1 x %struct.__gmp_randstate_struct]*] | |
| @.str1 = private unnamed_addr constant [9 x i8] c" z \00", align 1 ; [#uses=1 type=[9 x i8]*] | |
| @.str2 = private unnamed_addr constant [9 x i8] c" got \00", align 1 ; [#uses=1 type=[9 x i8]*] | |
| @.str3 = private unnamed_addr constant [17 x i8] c" got exp %ld\0A\00", align 1 ; [#uses=1 type=[17 x i8]*] | |
| @check_round.data = internal unnamed_addr constant [8 x i64] [i64 1, i64 32, i64 53, i64 54, i64 64, i64 128, i64 256, i64 512], align 16 ; [#uses=1 type=[8 x i64]*] | |
| @.str4 = private unnamed_addr constant [34 x i8] c"mpz_get_d_2exp wrong on 2**%lu-1\0A\00", align 1 ; [#uses=1 type=[34 x i8]*] | |
| @.str6 = private unnamed_addr constant [18 x i8] c" rnd_mode = %d\0A\00", align 1 ; [#uses=1 type=[18 x i8]*] | |
| @.str7 = private unnamed_addr constant [19 x i8] c" data[i] = %lu\0A\00", align 1 ; [#uses=1 type=[19 x i8]*] | |
| @.str8 = private unnamed_addr constant [35 x i8] c"mpz_get_d_2exp wrong on -2**%lu-1\0A\00", align 1 ; [#uses=1 type=[35 x i8]*] | |
| @check_onebit.data = internal unnamed_addr constant [13 x i64] [i64 1, i64 32, i64 52, i64 53, i64 54, i64 63, i64 64, i64 65, i64 128, i64 256, i64 511, i64 512, i64 513], align 16 ; [#uses=1 type=[13 x i64]*] | |
| @.str10 = private unnamed_addr constant [32 x i8] c"mpz_get_d_2exp wrong on 2**%ld\0A\00", align 1 ; [#uses=1 type=[32 x i8]*] | |
| @.str11 = private unnamed_addr constant [9 x i8] c" want \00", align 1 ; [#uses=1 type=[9 x i8]*] | |
| @.str12 = private unnamed_addr constant [17 x i8] c" want exp %ld\0A\00", align 1 ; [#uses=1 type=[17 x i8]*] | |
| @.str13 = private unnamed_addr constant [33 x i8] c"mpz_get_d_2exp wrong on -2**%ld\0A\00", align 1 ; [#uses=1 type=[33 x i8]*] | |
| @str = private unnamed_addr constant [29 x i8] c"mpz_get_d_2exp wrong on zero\00" ; [#uses=1 type=[29 x i8]*] | |
| @str15 = private unnamed_addr constant [47 x i8] c"result out of range, expect -1.0 < got <= -0.5\00" ; [#uses=1 type=[47 x i8]*] | |
| @str16 = private unnamed_addr constant [45 x i8] c"result out of range, expect 0.5 <= got < 1.0\00" ; [#uses=1 type=[45 x i8]*] | |
| @str17 = private unnamed_addr constant [53 x i8] c"mpz_get_d_2exp out of range, expect 0.5 <= got < 1.0\00" ; [#uses=1 type=[53 x i8]*] | |
| ; [#uses=0] | |
| ; Function Attrs: noreturn nounwind ssp uwtable | |
| define i32 @main() #0 { | |
| %got_exp.i12 = alloca i64, align 8 ; [#uses=3 type=i64*] | |
| %got_exp.i5 = alloca i64, align 8 ; [#uses=5 type=i64*] | |
| %got_exp.i2 = alloca i64, align 8 ; [#uses=7 type=i64*] | |
| %z.i = alloca [1 x %struct.__mpz_struct], align 16 ; [#uses=3 type=[1 x %struct.__mpz_struct]*] | |
| %got_exp.i = alloca i64, align 8 ; [#uses=4 type=i64*] | |
| call void @tests_start() #4 | |
| store i32 -16, i32* @mp_trace_base, align 4, !tbaa !0 | |
| %1 = bitcast [1 x %struct.__mpz_struct]* %z.i to i8* ; [#uses=8 type=i8*] | |
| call void @llvm.lifetime.start(i64 16, i8* %1) #4 | |
| %2 = bitcast i64* %got_exp.i to i8* ; [#uses=2 type=i8*] | |
| call void @llvm.lifetime.start(i64 8, i8* %2) #4 | |
| %3 = getelementptr inbounds [1 x %struct.__mpz_struct]* %z.i, i64 0, i64 0 ; [#uses=32 type=%struct.__mpz_struct*] | |
| call void @__gmpz_init_set_ui(%struct.__mpz_struct* %3, i64 0) #4 | |
| %4 = call double @__gmpz_get_d_2exp(i64* %got_exp.i, %struct.__mpz_struct* %3) #4 ; [#uses=2 type=double] | |
| %5 = fcmp oeq double %4, 0.000000e+00 ; [#uses=1 type=i1] | |
| %6 = load i64* %got_exp.i, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %7 = icmp eq i64 %6, 0 ; [#uses=1 type=i1] | |
| %or.cond.i = and i1 %5, %7 ; [#uses=1 type=i1] | |
| br i1 %or.cond.i, label %check_zero.exit, label %8 | |
| ; <label>:8 ; preds = %0 | |
| %puts.i = call i32 @puts(i8* getelementptr inbounds ([29 x i8]* @str, i64 0, i64 0)) #4 ; [#uses=0 type=i32] | |
| call void @mpz_trace(i8* getelementptr inbounds ([9 x i8]* @.str1, i64 0, i64 0), %struct.__mpz_struct* %3) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str11, i64 0, i64 0), double 0.000000e+00) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0), double %4) #4 | |
| %9 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str12, i64 0, i64 0), i64 0) #4 ; [#uses=0 type=i32] | |
| %10 = load i64* %got_exp.i, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %11 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str3, i64 0, i64 0), i64 %10) #4 ; [#uses=0 type=i32] | |
| call void @abort() #5 | |
| unreachable | |
| check_zero.exit: ; preds = %0 | |
| call void @__gmpz_clear(%struct.__mpz_struct* %3) #4 | |
| call void @llvm.lifetime.end(i64 16, i8* %1) #4 | |
| call void @llvm.lifetime.end(i64 8, i8* %2) #4 | |
| call void @llvm.lifetime.start(i64 16, i8* %1) #4 | |
| %12 = bitcast i64* %got_exp.i2 to i8* ; [#uses=2 type=i8*] | |
| call void @llvm.lifetime.start(i64 8, i8* %12) #4 | |
| call void @__gmpz_init(%struct.__mpz_struct* %3) #4 | |
| br label %16 | |
| ; <label>:13 ; preds = %29 | |
| %14 = trunc i64 %indvars.iv.next.i to i32 ; [#uses=1 type=i32] | |
| %15 = icmp ult i32 %14, 13 ; [#uses=1 type=i1] | |
| br i1 %15, label %16, label %check_onebit.exit | |
| ; <label>:16 ; preds = %13, %check_zero.exit | |
| %indvars.iv.i = phi i64 [ 0, %check_zero.exit ], [ %indvars.iv.next.i, %13 ] ; [#uses=2 type=i64] | |
| call void @__gmpz_set_ui(%struct.__mpz_struct* %3, i64 1) #4 | |
| %17 = getelementptr inbounds [13 x i64]* @check_onebit.data, i64 0, i64 %indvars.iv.i ; [#uses=1 type=i64*] | |
| %18 = load i64* %17, align 8, !tbaa !3 ; [#uses=5 type=i64] | |
| call void @__gmpz_mul_2exp(%struct.__mpz_struct* %3, %struct.__mpz_struct* %3, i64 %18) #4 | |
| %19 = add i64 %18, 1 ; [#uses=4 type=i64] | |
| %20 = call double @__gmpz_get_d_2exp(i64* %got_exp.i2, %struct.__mpz_struct* %3) #4 ; [#uses=2 type=double] | |
| %21 = fcmp oeq double %20, 5.000000e-01 ; [#uses=1 type=i1] | |
| %22 = load i64* %got_exp.i2, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %23 = icmp eq i64 %22, %19 ; [#uses=1 type=i1] | |
| %or.cond.i3 = and i1 %21, %23 ; [#uses=1 type=i1] | |
| br i1 %or.cond.i3, label %29, label %24 | |
| ; <label>:24 ; preds = %16 | |
| %25 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([32 x i8]* @.str10, i64 0, i64 0), i64 %18) #4 ; [#uses=0 type=i32] | |
| call void @mpz_trace(i8* getelementptr inbounds ([9 x i8]* @.str1, i64 0, i64 0), %struct.__mpz_struct* %3) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str11, i64 0, i64 0), double 5.000000e-01) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0), double %20) #4 | |
| %26 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str12, i64 0, i64 0), i64 %19) #4 ; [#uses=0 type=i32] | |
| %27 = load i64* %got_exp.i2, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %28 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str3, i64 0, i64 0), i64 %27) #4 ; [#uses=0 type=i32] | |
| call void @abort() #5 | |
| unreachable | |
| ; <label>:29 ; preds = %16 | |
| call void @__gmpz_set_si(%struct.__mpz_struct* %3, i64 -1) #4 | |
| call void @__gmpz_mul_2exp(%struct.__mpz_struct* %3, %struct.__mpz_struct* %3, i64 %18) #4 | |
| %30 = call double @__gmpz_get_d_2exp(i64* %got_exp.i2, %struct.__mpz_struct* %3) #4 ; [#uses=2 type=double] | |
| %31 = fcmp oeq double %30, -5.000000e-01 ; [#uses=1 type=i1] | |
| %32 = load i64* %got_exp.i2, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %33 = icmp eq i64 %32, %19 ; [#uses=1 type=i1] | |
| %or.cond3.i = and i1 %31, %33 ; [#uses=1 type=i1] | |
| %indvars.iv.next.i = add nuw nsw i64 %indvars.iv.i, 1 ; [#uses=2 type=i64] | |
| br i1 %or.cond3.i, label %13, label %34 | |
| ; <label>:34 ; preds = %29 | |
| %35 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([33 x i8]* @.str13, i64 0, i64 0), i64 %18) #4 ; [#uses=0 type=i32] | |
| call void @mpz_trace(i8* getelementptr inbounds ([9 x i8]* @.str1, i64 0, i64 0), %struct.__mpz_struct* %3) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str11, i64 0, i64 0), double -5.000000e-01) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0), double %30) #4 | |
| %36 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str12, i64 0, i64 0), i64 %19) #4 ; [#uses=0 type=i32] | |
| %37 = load i64* %got_exp.i2, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %38 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str3, i64 0, i64 0), i64 %37) #4 ; [#uses=0 type=i32] | |
| call void @abort() #5 | |
| unreachable | |
| check_onebit.exit: ; preds = %13 | |
| call void @__gmpz_clear(%struct.__mpz_struct* %3) #4 | |
| call void @llvm.lifetime.end(i64 16, i8* %1) #4 | |
| call void @llvm.lifetime.end(i64 8, i8* %12) #4 | |
| call void @llvm.lifetime.start(i64 16, i8* %1) #4 | |
| %39 = bitcast i64* %got_exp.i5 to i8* ; [#uses=2 type=i8*] | |
| call void @llvm.lifetime.start(i64 8, i8* %39) #4 | |
| call void @__gmpz_init(%struct.__mpz_struct* %3) #4 | |
| %40 = call i32 @tests_hardware_getround() #4 ; [#uses=1 type=i32] | |
| %41 = getelementptr inbounds [1 x %struct.__mpz_struct]* %z.i, i64 0, i64 0, i32 1 ; [#uses=3 type=i32*] | |
| br label %42 | |
| ; <label>:42 ; preds = %71, %check_onebit.exit | |
| %rnd_mode.012.i = phi i32 [ 0, %check_onebit.exit ], [ %72, %71 ] ; [#uses=4 type=i32] | |
| %43 = call i32 @tests_hardware_setround(i32 %rnd_mode.012.i) #4 ; [#uses=0 type=i32] | |
| br label %47 | |
| ; <label>:44 ; preds = %59 | |
| %45 = trunc i64 %indvars.iv.next.i9 to i32 ; [#uses=1 type=i32] | |
| %46 = icmp ult i32 %45, 8 ; [#uses=1 type=i1] | |
| br i1 %46, label %47, label %71 | |
| ; <label>:47 ; preds = %44, %42 | |
| %indvars.iv.i6 = phi i64 [ 0, %42 ], [ %indvars.iv.next.i9, %44 ] ; [#uses=2 type=i64] | |
| call void @__gmpz_set_ui(%struct.__mpz_struct* %3, i64 1) #4 | |
| %48 = getelementptr inbounds [8 x i64]* @check_round.data, i64 0, i64 %indvars.iv.i6 ; [#uses=1 type=i64*] | |
| %49 = load i64* %48, align 8, !tbaa !3 ; [#uses=5 type=i64] | |
| call void @__gmpz_mul_2exp(%struct.__mpz_struct* %3, %struct.__mpz_struct* %3, i64 %49) #4 | |
| call void @__gmpz_sub_ui(%struct.__mpz_struct* %3, %struct.__mpz_struct* %3, i64 1) #4 | |
| %50 = call double @__gmpz_get_d_2exp(i64* %got_exp.i5, %struct.__mpz_struct* %3) #4 ; [#uses=3 type=double] | |
| %51 = fcmp olt double %50, 5.000000e-01 ; [#uses=1 type=i1] | |
| %52 = fcmp oge double %50, 1.000000e+00 ; [#uses=1 type=i1] | |
| %or.cond.i7 = or i1 %51, %52 ; [#uses=1 type=i1] | |
| br i1 %or.cond.i7, label %53, label %59 | |
| ; <label>:53 ; preds = %47 | |
| %54 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([34 x i8]* @.str4, i64 0, i64 0), i64 %49) #4 ; [#uses=0 type=i32] | |
| %puts4.i = call i32 @puts(i8* getelementptr inbounds ([45 x i8]* @str16, i64 0, i64 0)) #4 ; [#uses=0 type=i32] | |
| %55 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str6, i64 0, i64 0), i32 %rnd_mode.012.i) #4 ; [#uses=0 type=i32] | |
| %56 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([19 x i8]* @.str7, i64 0, i64 0), i64 %49) #4 ; [#uses=0 type=i32] | |
| call void @mpz_trace(i8* getelementptr inbounds ([9 x i8]* @.str1, i64 0, i64 0), %struct.__mpz_struct* %3) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0), double %50) #4 | |
| %57 = load i64* %got_exp.i5, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %58 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str3, i64 0, i64 0), i64 %57) #4 ; [#uses=0 type=i32] | |
| call void @abort() #5 | |
| unreachable | |
| ; <label>:59 ; preds = %47 | |
| %60 = load i32* %41, align 4, !tbaa !0 ; [#uses=1 type=i32] | |
| %61 = sub nsw i32 0, %60 ; [#uses=1 type=i32] | |
| store i32 %61, i32* %41, align 4, !tbaa !0 | |
| %62 = call double @__gmpz_get_d_2exp(i64* %got_exp.i5, %struct.__mpz_struct* %3) #4 ; [#uses=3 type=double] | |
| %63 = fcmp ole double %62, -1.000000e+00 ; [#uses=1 type=i1] | |
| %64 = fcmp ogt double %62, -5.000000e-01 ; [#uses=1 type=i1] | |
| %or.cond3.i8 = or i1 %63, %64 ; [#uses=1 type=i1] | |
| %indvars.iv.next.i9 = add nuw nsw i64 %indvars.iv.i6, 1 ; [#uses=2 type=i64] | |
| br i1 %or.cond3.i8, label %65, label %44 | |
| ; <label>:65 ; preds = %59 | |
| %66 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([35 x i8]* @.str8, i64 0, i64 0), i64 %49) #4 ; [#uses=0 type=i32] | |
| %puts.i10 = call i32 @puts(i8* getelementptr inbounds ([47 x i8]* @str15, i64 0, i64 0)) #4 ; [#uses=0 type=i32] | |
| %67 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8]* @.str6, i64 0, i64 0), i32 %rnd_mode.012.i) #4 ; [#uses=0 type=i32] | |
| %68 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([19 x i8]* @.str7, i64 0, i64 0), i64 %49) #4 ; [#uses=0 type=i32] | |
| call void @mpz_trace(i8* getelementptr inbounds ([9 x i8]* @.str1, i64 0, i64 0), %struct.__mpz_struct* %3) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0), double %62) #4 | |
| %69 = load i64* %got_exp.i5, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %70 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str3, i64 0, i64 0), i64 %69) #4 ; [#uses=0 type=i32] | |
| call void @abort() #5 | |
| unreachable | |
| ; <label>:71 ; preds = %44 | |
| %72 = add nsw i32 %rnd_mode.012.i, 1 ; [#uses=2 type=i32] | |
| %73 = icmp slt i32 %72, 4 ; [#uses=1 type=i1] | |
| br i1 %73, label %42, label %check_round.exit | |
| check_round.exit: ; preds = %71 | |
| call void @__gmpz_clear(%struct.__mpz_struct* %3) #4 | |
| %74 = call i32 @tests_hardware_setround(i32 %40) #4 ; [#uses=0 type=i32] | |
| call void @llvm.lifetime.end(i64 16, i8* %1) #4 | |
| call void @llvm.lifetime.end(i64 8, i8* %39) #4 | |
| call void @llvm.lifetime.start(i64 16, i8* %1) #4 | |
| %75 = bitcast i64* %got_exp.i12 to i8* ; [#uses=2 type=i8*] | |
| call void @llvm.lifetime.start(i64 8, i8* %75) #4 | |
| %76 = load i8* @__gmp_rands_initialized, align 1, !tbaa !1 ; [#uses=1 type=i8] | |
| %77 = icmp eq i8 %76, 0 ; [#uses=1 type=i1] | |
| br i1 %77, label %78, label %79 | |
| ; <label>:78 ; preds = %check_round.exit | |
| store i8 1, i8* @__gmp_rands_initialized, align 1, !tbaa !1 | |
| call void @__gmp_randinit_mt_noseed(%struct.__gmp_randstate_struct* getelementptr inbounds ([1 x %struct.__gmp_randstate_struct]* @__gmp_rands, i64 0, i64 0)) #4 | |
| br label %79 | |
| ; <label>:79 ; preds = %78, %check_round.exit | |
| call void @__gmpz_init(%struct.__mpz_struct* %3) #4 | |
| br label %80 | |
| ; <label>:80 ; preds = %91, %79 | |
| %i.02.i = phi i32 [ 0, %79 ], [ %92, %91 ] ; [#uses=1 type=i32] | |
| %81 = call i64 @__gmp_urandomm_ui(%struct.__gmp_randstate_struct* getelementptr inbounds ([1 x %struct.__gmp_randstate_struct]* @__gmp_rands, i64 0, i64 0), i64 512) #4 ; [#uses=1 type=i64] | |
| call void @__gmpz_urandomb(%struct.__mpz_struct* %3, %struct.__gmp_randstate_struct* getelementptr inbounds ([1 x %struct.__gmp_randstate_struct]* @__gmp_rands, i64 0, i64 0), i64 %81) #4 | |
| %82 = call double @__gmpz_get_d_2exp(i64* %got_exp.i12, %struct.__mpz_struct* %3) #4 ; [#uses=3 type=double] | |
| %83 = load i32* %41, align 4, !tbaa !0 ; [#uses=1 type=i32] | |
| %84 = icmp eq i32 %83, 0 ; [#uses=1 type=i1] | |
| br i1 %84, label %91, label %85 | |
| ; <label>:85 ; preds = %80 | |
| %86 = fcmp olt double %82, 5.000000e-01 ; [#uses=1 type=i1] | |
| %87 = fcmp oge double %82, 1.000000e+00 ; [#uses=1 type=i1] | |
| %or.cond.i13 = or i1 %86, %87 ; [#uses=1 type=i1] | |
| br i1 %or.cond.i13, label %88, label %91 | |
| ; <label>:88 ; preds = %85 | |
| %puts.i14 = call i32 @puts(i8* getelementptr inbounds ([53 x i8]* @str17, i64 0, i64 0)) #4 ; [#uses=0 type=i32] | |
| call void @mpz_trace(i8* getelementptr inbounds ([9 x i8]* @.str1, i64 0, i64 0), %struct.__mpz_struct* %3) #4 | |
| call void @d_trace(i8* getelementptr inbounds ([9 x i8]* @.str2, i64 0, i64 0), double %82) #4 | |
| %89 = load i64* %got_exp.i12, align 8, !tbaa !3 ; [#uses=1 type=i64] | |
| %90 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8]* @.str3, i64 0, i64 0), i64 %89) #4 ; [#uses=0 type=i32] | |
| call void @abort() #5 | |
| unreachable | |
| ; <label>:91 ; preds = %85, %80 | |
| %92 = add nsw i32 %i.02.i, 1 ; [#uses=2 type=i32] | |
| %93 = icmp slt i32 %92, 200 ; [#uses=1 type=i1] | |
| br i1 %93, label %80, label %check_rand.exit | |
| check_rand.exit: ; preds = %91 | |
| call void @__gmpz_clear(%struct.__mpz_struct* %3) #4 | |
| call void @llvm.lifetime.end(i64 16, i8* %1) #4 | |
| call void @llvm.lifetime.end(i64 8, i8* %75) #4 | |
| call void @tests_end() #4 | |
| call void @exit(i32 0) #5 | |
| unreachable | |
| } | |
| ; [#uses=1] | |
| declare void @tests_start() #1 | |
| ; [#uses=1] | |
| declare void @tests_end() #1 | |
| ; [#uses=1] | |
| ; Function Attrs: noreturn | |
| declare void @exit(i32) #2 | |
| ; [#uses=1] | |
| declare void @__gmp_randinit_mt_noseed(%struct.__gmp_randstate_struct*) #1 | |
| ; [#uses=3] | |
| declare void @__gmpz_init(%struct.__mpz_struct*) #1 | |
| ; [#uses=1] | |
| declare i64 @__gmp_urandomm_ui(%struct.__gmp_randstate_struct*, i64) #1 | |
| ; [#uses=1] | |
| declare void @__gmpz_urandomb(%struct.__mpz_struct*, %struct.__gmp_randstate_struct*, i64) #1 | |
| ; [#uses=6] | |
| declare double @__gmpz_get_d_2exp(i64*, %struct.__mpz_struct*) #1 | |
| ; [#uses=17] | |
| ; Function Attrs: nounwind | |
| declare i32 @printf(i8* nocapture readonly, ...) #3 | |
| ; [#uses=6] | |
| declare void @mpz_trace(i8*, %struct.__mpz_struct*) #1 | |
| ; [#uses=9] | |
| declare void @d_trace(i8*, double) #1 | |
| ; [#uses=6] | |
| ; Function Attrs: noreturn | |
| declare void @abort() #2 | |
| ; [#uses=4] | |
| declare void @__gmpz_clear(%struct.__mpz_struct*) #1 | |
| ; [#uses=1] | |
| declare i32 @tests_hardware_getround() #1 | |
| ; [#uses=2] | |
| declare i32 @tests_hardware_setround(i32) #1 | |
| ; [#uses=2] | |
| declare void @__gmpz_set_ui(%struct.__mpz_struct*, i64) #1 | |
| ; [#uses=3] | |
| declare void @__gmpz_mul_2exp(%struct.__mpz_struct*, %struct.__mpz_struct*, i64) #1 | |
| ; [#uses=1] | |
| declare void @__gmpz_sub_ui(%struct.__mpz_struct*, %struct.__mpz_struct*, i64) #1 | |
| ; [#uses=1] | |
| declare void @__gmpz_set_si(%struct.__mpz_struct*, i64) #1 | |
| ; [#uses=1] | |
| declare void @__gmpz_init_set_ui(%struct.__mpz_struct*, i64) #1 | |
| ; [#uses=4] | |
| ; Function Attrs: nounwind | |
| declare i32 @puts(i8* nocapture readonly) #4 | |
| ; [#uses=8] | |
| ; Function Attrs: nounwind | |
| declare void @llvm.lifetime.start(i64, i8* nocapture) #4 | |
| ; [#uses=8] | |
| ; Function Attrs: nounwind | |
| declare void @llvm.lifetime.end(i64, i8* nocapture) #4 | |
| attributes #0 = { noreturn nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
| attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
| attributes #2 = { noreturn "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
| attributes #3 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-frame-pointer-elim-non-leaf"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } | |
| attributes #4 = { nounwind } | |
| attributes #5 = { noreturn nounwind } | |
| !0 = metadata !{metadata !"int", metadata !1} | |
| !1 = metadata !{metadata !"omnipotent char", metadata !2} | |
| !2 = metadata !{metadata !"Simple C/C++ TBAA"} | |
| !3 = metadata !{metadata !"long", metadata !1} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment