Skip to content

Instantly share code, notes, and snippets.

@geoff-nixon
Created August 18, 2013 12:33
Show Gist options
  • Select an option

  • Save geoff-nixon/6261433 to your computer and use it in GitHub Desktop.

Select an option

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)
; 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