Thanks for using Compiler Explorer
Sponsors
Jakt
C++
Ada
Algol68
Analysis
Android Java
Android Kotlin
Assembly
C
C3
Carbon
C with Coccinelle
C++ with Coccinelle
C++ (Circle)
CIRCT
Clean
Clojure
CMake
CMakeScript
COBOL
C++ for OpenCL
MLIR
Cppx
Cppx-Blue
Cppx-Gold
Cpp2-cppfront
Crystal
C#
CUDA C++
D
Dart
Elixir
Erlang
Fortran
F#
GLSL
Go
Haskell
HLSL
Hook
Hylo
IL
ispc
Java
Julia
Kotlin
LLVM IR
LLVM MIR
Modula-2
Mojo
Nim
Numba
Nix
Objective-C
Objective-C++
OCaml
Odin
OpenCL C
Pascal
Pony
PTX
Python
Racket
Raku
Ruby
Rust
Sail
Snowball
Scala
Slang
Solidity
Spice
SPIR-V
Swift
LLVM TableGen
Toit
Triton
TypeScript Native
V
Vala
Visual Basic
Vyper
WASM
Yul (Solidity IR)
Zig
Javascript
GIMPLE
Ygen
sway
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 19.1.0
clang 20.1.0
clang 21.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
hexagon-clang 16.0.5
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 19.1.0
llc 20.1.0
llc 21.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 19.1.0
opt 20.1.0
opt 21.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 = '272124_mir.bf14295a4353d90e-cgu.0' source_filename = "272124_mir.bf14295a4353d90e-cgu.0" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @0 = private unnamed_addr constant <{ [3 x i8], [1 x i8] }> <{ [3 x i8] zeroinitializer, [1 x i8] undef }>, align 2 @1 = private unnamed_addr constant <{ [5 x i8], [3 x i8] }> <{ [5 x i8] zeroinitializer, [3 x i8] undef }>, align 4 ; _272124_mir::fn24 ; Function Attrs: nonlazybind uwtable define void @_ZN11_272124_mir4fn2417h73b0586384398d72E(i1 noundef zeroext %_1, ptr noundef %0) unnamed_addr #0 { start: %1 = alloca ptr, align 8 %_19 = alloca i8, align 1 %_18 = alloca ptr, align 8 %_15 = alloca ptr, align 8 %_14 = alloca ptr, align 8 %_12 = alloca ptr, align 8 %_11 = alloca ptr, align 8 %_10 = alloca ptr, align 8 %_7 = alloca ptr, align 8 %_6 = alloca { i16, i8 }, align 2 %_5 = alloca i16, align 2 %_4 = alloca i8, align 1 %_3 = alloca { double, { i16, i8 }, { float, i8 }, [1 x i32] }, align 8 %_2 = alloca ptr, align 8 store ptr %0, ptr %_2, align 8 br i1 %_1, label %bb1, label %bb20 bb1: ; preds = %bb10, %start %2 = load ptr, ptr %_2, align 8, !noundef !2 store ptr %2, ptr %_15, align 8 br label %bb2 bb20: ; preds = %bb19, %bb17, %bb14, %bb13, %start ret void bb2: ; preds = %bb10, %bb8, %bb1 %3 = load ptr, ptr %_15, align 8, !noundef !2 store ptr %3, ptr %_10, align 8 br label %bb3 bb3: ; preds = %bb11, %bb2 %4 = load ptr, ptr %_10, align 8, !noundef !2 store ptr %4, ptr %_11, align 8 br label %bb4 bb4: ; preds = %bb16, %bb3 %5 = load ptr, ptr %_11, align 8, !noundef !2 store ptr %5, ptr %_10, align 8 %6 = load ptr, ptr %_10, align 8, !noundef !2 store ptr %6, ptr %_15, align 8 store ptr %_5, ptr %_14, align 8 br label %bb5 bb5: ; preds = %bb18, %bb4 %7 = load ptr, ptr %_14, align 8, !noundef !2 %8 = load i16, ptr %_6, align 2, !noundef !2 store i16 %8, ptr %7, align 2 br label %bb6 bb6: ; preds = %bb15, %bb9, %bb5 call void @llvm.lifetime.start.p0(i64 8, ptr %1) %9 = load ptr, ptr %_7, align 8, !noundef !2 %10 = getelementptr i8, ptr %9, i64 -9223372036854775808 store ptr %10, ptr %1, align 8 %_9 = load ptr, ptr %1, align 8, !noundef !2 call void @llvm.lifetime.end.p0(i64 8, ptr %1) store ptr %_4, ptr %_7, align 8 br label %bb8 bb8: ; preds = %bb12, %bb6 %_16 = load ptr, ptr %_7, align 8, !noundef !2 %_17 = load ptr, ptr %_11, align 8, !noundef !2 %11 = load i16, ptr %_6, align 2, !noundef !2 %12 = icmp eq i16 %11, 17880 br i1 %12, label %bb9, label %bb2 bb9: ; preds = %bb8 %13 = load ptr, ptr %_12, align 8, !noundef !2 %14 = getelementptr inbounds { i64, i8 }, ptr %13, i32 0, i32 1 %15 = load i8, ptr %14, align 8, !range !3, !noundef !2 %16 = trunc i8 %15 to i1 %17 = zext i1 %16 to i8 store i8 %17, ptr %_16, align 1 %18 = load i16, ptr %_6, align 2, !noundef !2 switch i16 %18, label %bb6 [ i16 2, label %bb10 i16 17880, label %bb11 ] bb10: ; preds = %bb14, %bb13, %bb9 %19 = load ptr, ptr %_15, align 8, !noundef !2 store i128 130970262459226695022473665274451085234, ptr %19, align 8 %20 = getelementptr inbounds { i128, i8 }, ptr %19, i32 0, i32 1 store i8 1, ptr %20, align 8 %21 = load ptr, ptr %_2, align 8, !noundef !2 %22 = load i128, ptr %21, align 8, !noundef !2 %23 = icmp eq i128 %22, 130970262459226695022473665274451085234 br i1 %23, label %bb2, label %bb1 bb11: ; preds = %bb9 %24 = load ptr, ptr %_10, align 8, !noundef !2 %25 = getelementptr inbounds { i128, i8 }, ptr %24, i32 0, i32 1 %26 = load i8, ptr %_19, align 1, !range !3, !noundef !2 %27 = trunc i8 %26 to i1 %28 = xor i1 %27, true %29 = zext i1 %28 to i8 store i8 %29, ptr %25, align 8 %30 = load ptr, ptr %_15, align 8, !noundef !2 store ptr %30, ptr %_2, align 8 %31 = load i128, ptr %_17, align 8, !noundef !2 %32 = icmp eq i128 %31, 1 br i1 %32, label %bb12, label %bb3 bb12: ; preds = %bb11 %33 = load i16, ptr %_6, align 2, !noundef !2 %34 = icmp eq i16 %33, 6570 br i1 %34, label %bb13, label %bb8 bb13: ; preds = %bb14, %bb12 store ptr %_6, ptr %_14, align 8 %35 = load ptr, ptr %_11, align 8, !noundef !2 %36 = load i128, ptr %35, align 8, !noundef !2 switch i128 %36, label %bb20 [ i128 0, label %bb10 i128 20110871145320553751023625515671144585, label %bb14 ] bb14: ; preds = %bb19, %bb13 %37 = load i16, ptr %_5, align 2, !noundef !2 switch i16 %37, label %bb20 [ i16 0, label %bb13 i16 2, label %bb10 i16 6570, label %bb15 ] bb15: ; preds = %bb14 %38 = load ptr, ptr %_11, align 8, !noundef !2 store i128 0, ptr %38, align 8 %39 = getelementptr inbounds { i128, i8 }, ptr %38, i32 0, i32 1 store i8 1, ptr %39, align 8 %40 = load i16, ptr %_5, align 2, !noundef !2 switch i16 %40, label %bb16 [ i16 2, label %bb6 i16 6570, label %bb17 ] bb16: ; preds = %bb19, %bb15 ; call _272124_mir::fn47 call void @_ZN11_272124_mir4fn4717ha1c54c2da348344dE(ptr noalias nocapture noundef sret({ double, { i16, i8 }, { float, i8 }, [1 x i32] }) dereferenceable(24) %_3) br label %bb4 bb17: ; preds = %bb19, %bb15 store ptr %_17, ptr %_11, align 8 %41 = load i16, ptr %_5, align 2, !noundef !2 switch i16 %41, label %bb18 [ i16 2, label %bb20 i16 4, label %bb19 ] bb18: ; preds = %bb17 ; call _272124_mir::fn49 %42 = call noundef ptr @_ZN11_272124_mir4fn4917h39d8d36ce5b27c69E() store ptr %42, ptr %_7, align 8 br label %bb5 bb19: ; preds = %bb17 %43 = load ptr, ptr %_18, align 8, !noundef !2 %44 = load i16, ptr %43, align 2, !noundef !2 %45 = zext i16 %44 to i128 store i128 %45, ptr %_17, align 8 %46 = load i16, ptr %_5, align 2, !noundef !2 switch i16 %46, label %bb16 [ i16 0, label %bb14 i16 4, label %bb20 i16 6570, label %bb17 ] } ; _272124_mir::fn47 ; Function Attrs: nonlazybind uwtable define void @_ZN11_272124_mir4fn4717ha1c54c2da348344dE(ptr noalias nocapture noundef sret({ double, { i16, i8 }, { float, i8 }, [1 x i32] }) dereferenceable(24) %0) unnamed_addr #0 { start: %_1.0 = load i16, ptr @0, align 2, !noundef !2 %1 = load i8, ptr getelementptr inbounds ({ i16, i8 }, ptr @0, i32 0, i32 1), align 2, !range !3, !noundef !2 %_1.1 = trunc i8 %1 to i1 %_2.0 = load float, ptr @1, align 4, !noundef !2 %2 = load i8, ptr getelementptr inbounds ({ float, i8 }, ptr @1, i32 0, i32 1), align 4, !range !3, !noundef !2 %_2.1 = trunc i8 %2 to i1 store double 0.000000e+00, ptr %0, align 8 %3 = getelementptr inbounds { double, { i16, i8 }, { float, i8 }, [1 x i32] }, ptr %0, i32 0, i32 1 %4 = getelementptr inbounds { i16, i8 }, ptr %3, i32 0, i32 0 store i16 %_1.0, ptr %4, align 8 %5 = getelementptr inbounds { i16, i8 }, ptr %3, i32 0, i32 1 %6 = zext i1 %_1.1 to i8 store i8 %6, ptr %5, align 2 %7 = getelementptr inbounds { double, { i16, i8 }, { float, i8 }, [1 x i32] }, ptr %0, i32 0, i32 2 %8 = getelementptr inbounds { float, i8 }, ptr %7, i32 0, i32 0 store float %_2.0, ptr %8, align 4 %9 = getelementptr inbounds { float, i8 }, ptr %7, i32 0, i32 1 %10 = zext i1 %_2.1 to i8 store i8 %10, ptr %9, align 4 ret void } ; _272124_mir::fn49 ; Function Attrs: nonlazybind uwtable define noundef ptr @_ZN11_272124_mir4fn4917h39d8d36ce5b27c69E() unnamed_addr #0 { start: ret ptr null } ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1 ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1 attributes #0 = { nonlazybind uwtable "probe-stack"="inline-asm" "target-cpu"="x86-64" } attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } !llvm.module.flags = !{!0, !1} !0 = !{i32 8, !"PIC Level", i32 2} !1 = !{i32 2, !"RtLibUseGOT", i32 1} !2 = !{} !3 = !{i8 0, i8 2}
Become a Patron
Sponsor on GitHub
Donate via PayPal
Compiler Explorer Shop
Source on GitHub
Mailing list
Installed libraries
Wiki
Report an issue
How it works
Contact the author
CE on Mastodon
CE on Bluesky
Statistics
Changelog
Version tree