Thanks for using Compiler Explorer
Sponsors
Jakt
C++
Ada
Analysis
Android Java
Android Kotlin
Assembly
C
C3
Carbon
C++ (Circle)
CIRCT
Clean
CMake
CMakeScript
COBOL
C++ for OpenCL
MLIR
Cppx
Cppx-Blue
Cppx-Gold
Cpp2-cppfront
Crystal
C#
CUDA C++
D
Dart
Elixir
Erlang
Fortran
F#
Go
Haskell
HLSL
Hook
Hylo
ispc
Java
Julia
Kotlin
LLVM IR
LLVM MIR
Modula-2
Nim
Objective-C
Objective-C++
OCaml
OpenCL C
Pascal
Pony
Python
Racket
Ruby
Rust
Snowball
Scala
Solidity
Spice
Swift
LLVM TableGen
Toit
TypeScript Native
V
Vala
Visual Basic
Zig
Javascript
GIMPLE
llvm source #1
Output
Compile to binary object
Link to binary
Execute the code
Intel asm syntax
Demangle identifiers
Verbose demangling
Filters
Unused labels
Library functions
Directives
Comments
Horizontal whitespace
Debug intrinsics
Compiler
clang (assertions trunk)
clang (trunk)
clang 10.0.0
clang 10.0.1
clang 11.0.0
clang 11.0.1
clang 12.0.0
clang 12.0.1
clang 13.0.0
clang 14.0.0
clang 15.0.0
clang 16.0.0
clang 17.0.1
clang 18.1.0
clang 4.0.1
clang 5.0.0
clang 6.0.0
clang 7.0.0
clang 8.0.0
clang 9.0.0
llc (assertions trunk)
llc (trunk)
llc 10.0.0
llc 10.0.1
llc 11.0.0
llc 11.0.1
llc 12.0.0
llc 12.0.1
llc 13.0.0
llc 14.0.0
llc 15.0.0
llc 16.0.0
llc 17.0.1
llc 18.1.0
llc 3.2
llc 3.3
llc 3.9.1
llc 4.0.0
llc 4.0.1
llc 5.0.0
llc 6.0.0
llc 7.0.0
llc 8.0.0
llc 9.0.0
opt (assertions trunk)
opt (trunk)
opt 10.0.0
opt 10.0.1
opt 11.0.0
opt 11.0.1
opt 12.0.0
opt 12.0.1
opt 13.0.0
opt 14.0.0
opt 15.0.0
opt 16.0.0
opt 17.0.1
opt 18.1.0
opt 3.2
opt 3.3
opt 3.9.1
opt 4.0.0
opt 4.0.1
opt 5.0.0
opt 6.0.0
opt 7.0.0
opt 8.0.0
opt 9.0.0
Options
Source code
; ModuleID = 'reproducer.ll' source_filename = "reproducer.ll" target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target triple = "arm64e-apple-macosx" %struct.zot = type { %struct.ham } %struct.ham = type { [2 x i32] } ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0 declare i32 @pluto(...) declare void @pluto.1() declare void @pluto.2() declare void @baz() declare void @hoge() ; Function Attrs: cold declare [2 x i64] @zot() #1 declare ptr @spam(ptr) declare i32 @hoge.3() ; Function Attrs: minsize define weak_odr void @widget(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, i32 %arg4, ptr %arg5, ptr %arg6, ptr %arg7, i1 %arg8, i1 %arg9, i8 %arg10) #2 personality ptr @pluto { bb: %inst = zext i32 1 to i64 br label %bb11 bb11: ; preds = %bb19, %bb %inst12 = phi i64 [ 0, %bb ], [ %inst22, %bb19 ] %inst13 = getelementptr i32, ptr null, i64 %inst12 br i1 %arg8, label %bb16, label %bb15 bb14: ; preds = %bb44, %bb15 ret void bb15: ; preds = %bb11 store i8 0, ptr %arg, align 1 br label %bb14 bb16: ; preds = %bb16, %bb11 store i8 0, ptr %arg6, align 1 %inst17 = load volatile [2 x i64], ptr null, align 8 store i8 102, ptr %arg2, align 1 %inst18 = icmp eq i64 0, 1 br i1 %inst18, label %bb19, label %bb16 bb19: ; preds = %bb16 %inst20 = load ptr, ptr %arg5, align 8 %inst21 = call i1 %inst20(ptr %arg3, i32 0, i32 0) %inst22 = or i64 %inst12, 1 br i1 %arg8, label %bb23, label %bb11 bb23: ; preds = %bb19 %inst24 = select i1 false, i1 false, i1 false br label %bb25 bb25: ; preds = %bb54, %bb23 %inst26 = load volatile i1, ptr %arg2, align 1 br i1 %arg8, label %bb27, label %bb33 bb27: ; preds = %bb29, %bb25 %inst28 = phi i64 [ 1, %bb29 ], [ 0, %bb25 ] br label %bb31 bb29: ; preds = %bb31 %inst30 = icmp eq i64 %inst28, %inst br i1 %inst30, label %bb54, label %bb27 bb31: ; preds = %bb31, %bb27 call void @pluto.1() %inst32 = icmp eq i64 0, 0 br i1 %inst32, label %bb29, label %bb31 bb33: ; preds = %bb25 %inst34 = call i32 @hoge.3(ptr null, i32 0) br label %bb35 bb35: ; preds = %bb41, %bb33 %inst36 = icmp eq i8 %arg10, 0 %inst37 = zext i32 %inst34 to i64 %inst38 = getelementptr i8, ptr null, i64 %inst37 %inst39 = load i8, ptr %inst38, align 1 %inst40 = icmp eq i8 %inst39, 0 br label %bb42 bb41: ; preds = %bb51 br i1 %arg8, label %bb53, label %bb35 bb42: ; preds = %bb51, %bb35 %inst43 = phi i64 [ 0, %bb35 ], [ %inst52, %bb51 ] call void @pluto.1(ptr %arg1, i32 0, i32 0) br i1 %inst36, label %bb47, label %bb46 bb44: ; preds = %bb47 %inst45 = landingpad { ptr, i32 } cleanup br label %bb14 bb46: ; preds = %bb42 call void @pluto.1(ptr %arg, i32 0, i32 0) br label %bb47 bb47: ; preds = %bb46, %bb42 invoke void @pluto.1(ptr null, i32 0, i32 0) to label %bb48 unwind label %bb44 bb48: ; preds = %bb47 br i1 %inst40, label %bb51, label %bb49 bb49: ; preds = %bb48 %inst50 = getelementptr i32, ptr null, i64 %inst43 br label %bb51 bb51: ; preds = %bb49, %bb48 %inst52 = or i64 %inst43, 1 br i1 %arg9, label %bb41, label %bb42 bb53: ; preds = %bb41 call void @llvm.lifetime.start.p0(i64 0, ptr null) br label %bb54 bb54: ; preds = %bb53, %bb29 br i1 %arg9, label %bb25, label %bb55 bb55: ; preds = %bb54 %inst56 = call ptr @spam(ptr null) unreachable } ; Function Attrs: minsize define weak_odr void @eggs(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, i32 %arg4, i64 %arg5, i64 %arg6, ptr %arg7, i1 %arg8, i1 %arg9, i1 %arg10, i1 %arg11) #2 personality ptr @pluto { bb: %inst = alloca %struct.zot, i32 0, align 4 br label %bb12 bb12: ; preds = %bb19, %bb br i1 %arg11, label %bb14, label %bb13 bb13: ; preds = %bb41, %bb12 ret void bb14: ; preds = %bb17, %bb12 store i8 1, ptr %arg3, align 1 br i1 %arg9, label %bb15, label %bb17 bb15: ; preds = %bb14 %inst16 = load ptr, ptr null, align 8 br label %bb17 bb17: ; preds = %bb15, %bb14 %inst18 = icmp eq i64 %arg5, %arg6 br i1 %inst18, label %bb20, label %bb14 bb19: ; preds = %bb20 br i1 %arg8, label %bb23, label %bb12 bb20: ; preds = %bb20, %bb17 %inst21 = load ptr, ptr null, align 8 %inst22 = call i1 %inst21(ptr null, i32 0, i32 0) br i1 %arg10, label %bb19, label %bb20 bb23: ; preds = %bb50, %bb19 br i1 %arg10, label %bb24, label %bb51 bb24: ; preds = %bb29, %bb23 %inst25 = load i8, ptr null, align 1 %inst26 = icmp eq i8 %inst25, 0 call void @pluto.2() br i1 %inst26, label %bb29, label %bb27 bb27: ; preds = %bb24 %inst28 = load ptr, ptr null, align 8 br label %bb29 bb29: ; preds = %bb27, %bb24 br i1 %arg11, label %bb50, label %bb24 bb30: ; preds = %bb50 %inst31 = call i32 @hoge.3(ptr null, i32 0) br label %bb32 bb32: ; preds = %bb37, %bb30 %inst33 = zext i32 %inst31 to i64 %inst34 = getelementptr i8, ptr null, i64 %inst33 %inst35 = load i8, ptr %inst34, align 1 %inst36 = icmp eq i8 %inst35, 0 br label %bb38 bb37: ; preds = %bb48 br i1 %arg9, label %bb49, label %bb32 bb38: ; preds = %bb48, %bb32 %inst39 = load i8, ptr %arg2, align 1 %inst40 = icmp eq i8 %inst39, 0 invoke void @pluto.2(ptr %arg, i32 0, i32 0) to label %bb43 unwind label %bb41 bb41: ; preds = %bb38 %inst42 = landingpad { ptr, i32 } cleanup br label %bb13 bb43: ; preds = %bb38 call void @pluto.2(ptr null, i32 0, i32 0) call void @pluto.2(ptr %arg1, i32 0, i32 0) %inst44 = or i1 true, %inst40 br i1 %inst44, label %bb46, label %bb45 bb45: ; preds = %bb43 call void @pluto.2(ptr null, i32 0, i32 0) br label %bb46 bb46: ; preds = %bb45, %bb43 br i1 %inst36, label %bb48, label %bb47 bb47: ; preds = %bb46 call void @pluto.2(ptr null, i32 0, i32 0) br label %bb48 bb48: ; preds = %bb47, %bb46 br i1 %arg8, label %bb37, label %bb38 bb49: ; preds = %bb37 call void @llvm.lifetime.start.p0(i64 0, ptr null) br label %bb50 bb50: ; preds = %bb49, %bb29 br i1 %arg8, label %bb23, label %bb30 bb51: ; preds = %bb23 %inst52 = call ptr @spam(ptr null) unreachable } ; Function Attrs: minsize define weak_odr void @baz.4(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, i32 %arg4, i64 %arg5, i64 %arg6, i64 %arg7, i1 %arg8, i1 %arg9, i1 %arg10, ptr %arg11, i1 %arg12, i1 %arg13) #2 personality ptr @pluto { bb: %inst = alloca %struct.zot, i32 0, align 4 br label %bb14 bb14: ; preds = %bb17, %bb br i1 %arg9, label %bb16, label %bb15 bb15: ; preds = %bb42, %bb14 ret void bb16: ; preds = %bb16, %bb14 store i8 0, ptr %arg3, align 1 store i8 1, ptr %arg2, align 1 br i1 %arg10, label %bb17, label %bb16 bb17: ; preds = %bb16 %inst18 = load ptr, ptr null, align 8 %inst19 = call i1 %inst18(ptr %arg11, i32 0, i32 0) br i1 %arg8, label %bb20, label %bb14 bb20: ; preds = %bb50, %bb17 br i1 %arg9, label %bb21, label %bb51 bb21: ; preds = %bb20 br i1 %arg8, label %bb22, label %bb31 bb22: ; preds = %bb24, %bb21 %inst23 = load ptr, ptr null, align 8 br label %bb25 bb24: ; preds = %bb29 br i1 %arg10, label %bb50, label %bb22 bb25: ; preds = %bb29, %bb22 %inst26 = load i8, ptr null, align 1 %inst27 = icmp eq i8 %inst26, 0 call void @baz(ptr null, i32 0, i32 0) br i1 %inst27, label %bb29, label %bb28 bb28: ; preds = %bb25 store i32 0, ptr %arg, align 4 br label %bb29 bb29: ; preds = %bb28, %bb25 %inst30 = icmp eq i64 0, 0 br i1 %inst30, label %bb24, label %bb25 bb31: ; preds = %bb50, %bb21 %inst32 = invoke i32 @hoge.3(ptr null, i32 0) to label %bb33 unwind label %bb42 bb33: ; preds = %bb39, %bb31 %inst34 = phi i64 [ 1, %bb39 ], [ 0, %bb31 ] %inst35 = zext i32 %inst32 to i64 %inst36 = getelementptr i8, ptr null, i64 %inst35 %inst37 = load i8, ptr %inst36, align 1 %inst38 = icmp eq i8 %inst37, 0 br label %bb41 bb39: ; preds = %bb48 %inst40 = icmp eq i64 %inst34, 0 br i1 %inst40, label %bb49, label %bb33 bb41: ; preds = %bb48, %bb33 invoke void @baz(ptr %arg, i32 0, i32 0) to label %bb44 unwind label %bb42 bb42: ; preds = %bb41, %bb31 %inst43 = landingpad { ptr, i32 } cleanup br label %bb15 bb44: ; preds = %bb41 call void @baz(ptr %arg1, i32 0, i32 0) br i1 %arg12, label %bb46, label %bb45 bb45: ; preds = %bb44 call void @baz(ptr null, i32 0, i32 0) br label %bb46 bb46: ; preds = %bb45, %bb44 br i1 %inst38, label %bb48, label %bb47 bb47: ; preds = %bb46 call void @baz(ptr null, i32 0, i32 0) br label %bb48 bb48: ; preds = %bb47, %bb46 br i1 %arg13, label %bb39, label %bb41 bb49: ; preds = %bb39 call void @llvm.lifetime.start.p0(i64 0, ptr null) br label %bb50 bb50: ; preds = %bb49, %bb24 br i1 %arg8, label %bb20, label %bb31 bb51: ; preds = %bb20 %inst52 = call ptr @spam(ptr null) unreachable } ; Function Attrs: minsize define weak_odr void @barney(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, i64 %arg4, i64 %arg5, i64 %arg6, ptr %arg7, i1 %arg8, i1 %arg9) #2 personality ptr @pluto { bb: %inst = alloca %struct.zot, i32 0, align 4 %inst10 = load i32, ptr null, align 8 %inst11 = zext i32 %inst10 to i64 %inst12 = call ptr @zot.5() store i32 0, ptr %arg, align 4 br label %bb13 bb13: ; preds = %bb27, %bb %inst14 = phi i64 [ 0, %bb ], [ %arg4, %bb27 ] %inst15 = load ptr, ptr %arg, align 8 %inst16 = getelementptr i32, ptr %inst15, i64 %inst14 %inst17 = load i32, ptr %inst16, align 4 %inst18 = icmp eq i32 %inst17, 0 br i1 %inst18, label %bb22, label %bb20 bb19: ; preds = %bb56, %bb20 ret void bb20: ; preds = %bb13 %inst21 = call [2 x i64] @zot() br label %bb19 bb22: ; preds = %bb25, %bb13 store i8 0, ptr %arg7, align 1 br i1 %arg8, label %bb23, label %bb25 bb23: ; preds = %bb22 %inst24 = load ptr, ptr null, align 8 br label %bb25 bb25: ; preds = %bb23, %bb22 store i8 1, ptr %arg3, align 1 %inst26 = icmp eq i64 0, %inst11 br i1 %inst26, label %bb28, label %bb22 bb27: ; preds = %bb28 br i1 %arg8, label %bb31, label %bb13 bb28: ; preds = %bb28, %bb25 %inst29 = load ptr, ptr null, align 8 %inst30 = call i1 %inst29(ptr %arg2, i32 0, i32 0) br i1 %arg9, label %bb27, label %bb28 bb31: ; preds = %bb72, %bb27 br i1 %arg9, label %bb32, label %bb73 bb32: ; preds = %bb31 br i1 %arg8, label %bb33, label %bb43 bb33: ; preds = %bb35, %bb32 %inst34 = load ptr, ptr null, align 8 br label %bb37 bb35: ; preds = %bb41 %inst36 = icmp eq i64 0, %inst11 br i1 %inst36, label %bb72, label %bb33 bb37: ; preds = %bb41, %bb33 %inst38 = load i8, ptr %arg2, align 1 %inst39 = icmp eq i8 %inst38, 0 call void @hoge(ptr null, i32 0, i32 0) br i1 %inst39, label %bb41, label %bb40 bb40: ; preds = %bb37 store i32 0, ptr %arg1, align 4 br label %bb41 bb41: ; preds = %bb40, %bb37 %inst42 = icmp eq i64 0, 0 br i1 %inst42, label %bb35, label %bb37 bb43: ; preds = %bb72, %bb32 %inst44 = call i32 @hoge.3(ptr null, i32 0) br label %bb45 bb45: ; preds = %bb52, %bb43 %inst46 = load i8, ptr null, align 1 %inst47 = icmp eq i8 %inst46, 0 %inst48 = zext i32 %inst44 to i64 %inst49 = getelementptr i8, ptr null, i64 %inst48 %inst50 = load i8, ptr %inst49, align 1 %inst51 = icmp eq i8 %inst50, 0 br label %bb53 bb52: ; preds = %bb70 br i1 %arg8, label %bb71, label %bb45 bb53: ; preds = %bb70, %bb45 %inst54 = load i8, ptr null, align 1 %inst55 = icmp eq i8 %inst54, 0 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb58 unwind label %bb56 bb56: ; preds = %bb69, %bb67, %bb66, %bb65, %bb64, %bb63, %bb60, %bb59, %bb58, %bb53 %inst57 = landingpad { ptr, i32 } cleanup br label %bb19 bb58: ; preds = %bb53 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb59 unwind label %bb56 bb59: ; preds = %bb58 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb60 unwind label %bb56 bb60: ; preds = %bb59 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb61 unwind label %bb56 bb61: ; preds = %bb60 %inst62 = or i1 %inst47, %inst55 br i1 %inst62, label %bb64, label %bb63 bb63: ; preds = %bb61 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb64 unwind label %bb56 bb64: ; preds = %bb63, %bb61 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb65 unwind label %bb56 bb65: ; preds = %bb64 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb66 unwind label %bb56 bb66: ; preds = %bb65 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb67 unwind label %bb56 bb67: ; preds = %bb66 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb68 unwind label %bb56 bb68: ; preds = %bb67 br i1 %inst51, label %bb70, label %bb69 bb69: ; preds = %bb68 invoke void @hoge(ptr %arg1, i32 0, i32 0) to label %bb70 unwind label %bb56 bb70: ; preds = %bb69, %bb68 br i1 %arg9, label %bb52, label %bb53 bb71: ; preds = %bb52 call void @llvm.lifetime.start.p0(i64 0, ptr null) br label %bb72 bb72: ; preds = %bb71, %bb35 br i1 %arg8, label %bb31, label %bb43 bb73: ; preds = %bb31 %inst74 = call ptr @spam(ptr %arg) unreachable } declare ptr @zot.5() attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } attributes #1 = { cold } attributes #2 = { minsize }
Become a Patron
Sponsor on GitHub
Donate via PayPal
Source on GitHub
Mailing list
Installed libraries
Wiki
Report an issue
How it works
Contact the author
CE on Mastodon
About the author
Statistics
Changelog
Version tree