Skip to content

Instantly share code, notes, and snippets.

@tathanhdinh
Created August 20, 2018 16:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tathanhdinh/23470452910da9f73b857b2e6a12f144 to your computer and use it in GitHub Desktop.
Save tathanhdinh/23470452910da9f73b857b2e6a12f144 to your computer and use it in GitHub Desktop.
source_filename = "llvm-link"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu-elf"
%struct.Zimm = type { %struct.InZimm, [32 x %union.CCback], %struct.ACalls, %union.anon, %struct.BCalls, %struct.FoldedBlock, %struct.BasicTGroup, %struct.PCalls, %struct.PCallExtended, %struct.SCallExtended, %union.anon, %union.Ccon }
%struct.InZimm = type { i32, i32, %union.anon }
%union.CCback = type { %union.vec512_t }
%union.vec512_t = type { %struct.uint64v8_t }
%struct.uint64v8_t = type { [8 x i64] }
%struct.ACalls = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8 }
%struct.BCalls = type { i16, %union.SCallback, i16, %union.SCallback, i16, %union.SCallback, i16, %union.SCallback, i16, %union.SCallback, i16, %union.SCallback }
%union.SCallback = type { i16 }
%struct.FoldedBlock = type { i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT }
%struct.BasicT = type { %union.anon }
%struct.BasicTGroup = type { i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT, i64, %struct.BasicT }
%struct.PCalls = type { [8 x %struct.anon.3] }
%struct.anon.3 = type { i64, double }
%struct.PCallExtended = type { [8 x %struct.anon.4] }
%struct.anon.4 = type { i64, %union.vec64_t }
%union.vec64_t = type { %struct.uint64v1_t }
%struct.uint64v1_t = type { [1 x i64] }
%struct.SCallExtended = type { i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, [4 x i8] }
%union.anon = type { i64 }
%union.Ccon = type { %struct.anon.13 }
%struct.anon.13 = type { %struct.Backcall, [96 x i8] }
%struct.Backcall = type { %union.SCallback, %union.SCallback, %union.CconAbridgedTagWord, i8, i16, i32, %union.SCallback, i16, i32, %union.SCallback, i16, %union.CconControlStatus, %union.CconControlStatus, [8 x %struct.BackElem], [16 x %union.vec128_t] }
%union.CconAbridgedTagWord = type { i8 }
%union.CconControlStatus = type { i32 }
%struct.BackElem = type { %union.anon.11, [6 x i8] }
%union.anon.11 = type { %struct.float80_t }
%struct.float80_t = type { [10 x i8] }
%union.vec128_t = type { %struct.uint128v1_t }
%struct.uint128v1_t = type { [1 x i128] }
%struct.Flatback = type opaque
; Function Attrs: noinline nounwind
define %struct.Flatback addrspace(2)* @go_back(%struct.Zimm* noalias dereferenceable(3280) %state2, i64 %pc, %struct.Flatback addrspace(2)* noalias %fb1) #0 {
%1 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 6, i32 33, i32 0, i32 0
%2 = add i64 %pc, 2
store i64 %2, i64* %1, align 8
%3 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 6, i32 5, i32 0, i32 0
%4 = load i64, i64* %3, align 8, !tbaa !0
%5 = icmp eq i64 %4, 0
br i1 %5, label %_goto_end, label %6
; <label>:6: ; preds = %0
%7 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 6, i32 9, i32 0, i32 0
%8 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 6, i32 11, i32 0, i32 0
%9 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 1
%10 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 5
%11 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 9
%12 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 11
%13 = load i8, i8* %12, align 1, !tbaa !3
%14 = icmp eq i8 %13, 0
%15 = select i1 %14, i64 1, i64 -1
%16 = load i64, i64* %7, align 8, !tbaa !0
%17 = load i64, i64* %8, align 8, !tbaa !0
br label %18
; <label>:18: ; preds = %18, %6
%19 = phi i64 [ %17, %6 ], [ %31, %18 ]
%20 = phi i64 [ %16, %6 ], [ %30, %18 ]
%21 = phi i64 [ %4, %6 ], [ %32, %18 ]
%22 = bitcast %struct.Flatback addrspace(2)* %fb1 to i8 addrspace(2)*
%23 = getelementptr inbounds i8, i8 addrspace(2)* %22, i64 %20
%24 = load i8, i8 addrspace(2)* %23, align 1
%25 = bitcast %struct.Flatback addrspace(2)* %fb1 to i8 addrspace(2)*
%26 = getelementptr inbounds i8, i8 addrspace(2)* %25, i64 %19
%27 = load i8, i8 addrspace(2)* %26, align 1
%28 = sub i8 %24, %27
%29 = icmp eq i8 %28, 0
%30 = add i64 %15, %20
%31 = add i64 %15, %19
%32 = add i64 %21, -1
%33 = icmp ne i64 %32, 0
%34 = and i1 %33, %29
br i1 %34, label %18, label %35
; <label>:35: ; preds = %18
%36 = lshr i8 %28, 7
%37 = lshr i8 %24, 7
%38 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 3
%39 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 7
%40 = getelementptr inbounds %struct.Zimm, %struct.Zimm* %state2, i64 0, i32 2, i32 13
%41 = icmp ult i8 %24, %27
%42 = zext i1 %41 to i8
%43 = zext i8 %28 to i32
%44 = tail call i32 undef(i32 %43) #1, !range !15
%45 = trunc i32 %44 to i8
%46 = and i8 %45, 1
%47 = xor i8 %46, 1
%48 = xor i8 %27, %24
%49 = xor i8 %48, %28
%50 = lshr i8 %49, 4
%51 = and i8 %50, 1
%52 = zext i1 %29 to i8
%53 = xor i8 %36, %37
%54 = lshr i8 %27, 7
%55 = xor i8 %54, %37
%56 = add nuw nsw i8 %53, %55
%57 = icmp eq i8 %56, 2
%58 = zext i1 %57 to i8
store i64 %30, i64* %7, align 8, !tbaa !0
store i64 %31, i64* %8, align 8, !tbaa !0
store i8 %42, i8* %9, align 1, !tbaa !16
store i8 %47, i8* %38, align 1, !tbaa !17
store i8 %51, i8* %10, align 1, !tbaa !18
store i8 %52, i8* %39, align 1, !tbaa !19
store i8 %36, i8* %11, align 1, !tbaa !20
store i8 %58, i8* %40, align 1, !tbaa !21
store i64 %32, i64* %3, align 8, !tbaa !22
br label %_goto_end
_goto_end: ; preds = %35, %0
ret %struct.Flatback addrspace(2)* %fb1
}
attributes #0 = { noinline nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { nounwind }
!0 = !{!1, !1, i64 0}
!1 = !{!"omnipotent char", !2, i64 0}
!2 = !{!"Simple C++ TBAA"}
!3 = !{!4, !1, i64 2075}
!4 = !{!"_BeginExtended", !1, i64 16, !5, i64 2064, !1, i64 2080, !6, i64 2088, !8, i64 2112, !11, i64 2208, !12, i64 2480, !13, i64 2608, !14, i64 2736, !1, i64 2760, !1, i64 2768}
!5 = !{!"_Pushdown", !1, i64 0, !1, i64 1, !1, i64 2, !1, i64 3, !1, i64 4, !1, i64 5, !1, i64 6, !1, i64 7, !1, i64 8, !1, i64 9, !1, i64 10, !1, i64 11, !1, i64 12, !1, i64 13, !1, i64 14, !1, i64 15}
!6 = !{!"_Pushback", !7, i64 0, !1, i64 2, !7, i64 4, !1, i64 6, !7, i64 8, !1, i64 10, !7, i64 12, !1, i64 14, !7, i64 16, !1, i64 18, !7, i64 20, !1, i64 22}
!7 = !{!"short", !1, i64 0}
!8 = !{!"_Insertback", !9, i64 0, !10, i64 8, !9, i64 16, !10, i64 24, !9, i64 32, !10, i64 40, !9, i64 48, !10, i64 56, !9, i64 64, !10, i64 72, !9, i64 80, !10, i64 88}
!9 = !{!"long", !1, i64 0}
!10 = !{!"_Insertbegin", !1, i64 0}
!11 = !{!"_BeginFolded", !9, i64 0, !10, i64 8, !9, i64 16, !10, i64 24, !9, i64 32, !10, i64 40, !9, i64 48, !10, i64 56, !9, i64 64, !10, i64 72, !9, i64 80, !10, i64 88, !9, i64 96, !10, i64 104, !9, i64 112, !10, i64 120, !9, i64 128, !10, i64 136, !9, i64 144, !10, i64 152, !9, i64 160, !10, i64 168, !9, i64 176, !10, i64 184, !9, i64 192, !10, i64 200, !9, i64 208, !10, i64 216, !9, i64 224, !10, i64 232, !9, i64 240, !10, i64 248, !9, i64 256, !10, i64 264}
!12 = !{!"_GroupFolded", !1, i64 0}
!13 = !{!"_InsertExtended", !1, i64 0}
!14 = !{!"_InsertBackExtended", !1, i64 0, !1, i64 1, !1, i64 2, !1, i64 3, !1, i64 4, !1, i64 5, !1, i64 6, !1, i64 7, !1, i64 8, !1, i64 9, !1, i64 10, !1, i64 11, !1, i64 12, !1, i64 13, !1, i64 14, !1, i64 15, !1, i64 16, !1, i64 17, !1, i64 18, !1, i64 19, !1, i64 20}
!15 = !{i32 0, i32 9}
!16 = !{!4, !1, i64 2065}
!17 = !{!4, !1, i64 2067}
!18 = !{!4, !1, i64 2069}
!19 = !{!4, !1, i64 2071}
!20 = !{!4, !1, i64 2073}
!21 = !{!4, !1, i64 2077}
!22 = !{!9, !9, i64 0}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment