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
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
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 = '/tmp/patricia.ll' source_filename = "/Users/gameboy/llvm-test-suite/MultiSource/Benchmarks/MiBench/network-patricia/patricia_test.c" target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target triple = "arm64-apple-macosx12.0.0" %0 = type { i32 } %1 = type { i64, ptr, i8, i8, ptr, ptr } %2 = type { i64, ptr } @0 = private unnamed_addr constant [24 x i8] c"Usage: %s <TCP stream>\0A\00", align 1 @1 = private unnamed_addr constant [2 x i8] c"r\00", align 1 @2 = private unnamed_addr constant [31 x i8] c"File %s doesn't seem to exist\0A\00", align 1 @3 = private unnamed_addr constant [23 x i8] c"Allocating p-trie node\00", align 1 @4 = private unnamed_addr constant [28 x i8] c"Allocating p-trie mask data\00", align 1 @5 = private unnamed_addr constant [35 x i8] c"Allocating p-trie mask's node data\00", align 1 @6 = private unnamed_addr constant [6 x i8] c"%f %d\00", align 1 @7 = private unnamed_addr constant [10 x i8] c"%f %08x: \00", align 1 @8 = private unnamed_addr constant [8 x i8] c"Found.\0A\00", align 1 @__stderrp = external global ptr, align 8 @9 = private unnamed_addr constant [22 x i8] c"Failed on pat_insert\0A\00", align 1 ; Function Attrs: nounwind ssp uwtable define i32 @main(i32 noundef %0, ptr noundef %1) #0 { %3 = alloca i32, align 4 %4 = alloca i32, align 4 %5 = alloca ptr, align 8 %6 = alloca ptr, align 8 %7 = alloca ptr, align 8 %8 = alloca ptr, align 8 %9 = alloca ptr, align 8 %10 = alloca ptr, align 8 %11 = alloca [128 x i8], align 1 %12 = alloca [16 x i8], align 1 %13 = alloca %0, align 4 %14 = alloca i64, align 8 %15 = alloca float, align 4 store i32 0, ptr %3, align 4 store i32 %0, ptr %4, align 4 store ptr %1, ptr %5, align 8 call void @llvm.lifetime.start.p0(i64 8, ptr %6) #10 call void @llvm.lifetime.start.p0(i64 8, ptr %7) #10 call void @llvm.lifetime.start.p0(i64 8, ptr %8) #10 call void @llvm.lifetime.start.p0(i64 8, ptr %9) #10 call void @llvm.lifetime.start.p0(i64 8, ptr %10) #10 call void @llvm.lifetime.start.p0(i64 128, ptr %11) #10 call void @llvm.lifetime.start.p0(i64 16, ptr %12) #10 call void @llvm.lifetime.start.p0(i64 4, ptr %13) #10 call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10 store i64 4294967295, ptr %14, align 8 call void @llvm.lifetime.start.p0(i64 4, ptr %15) #10 %16 = load i32, ptr %4, align 4 %17 = icmp slt i32 %16, 2 br i1 %17, label %18, label %23 18: ; preds = %2 %19 = load ptr, ptr %5, align 8 %20 = getelementptr inbounds ptr, ptr %19, i64 0 %21 = load ptr, ptr %20, align 8 %22 = call i32 (ptr, ...) @printf(ptr noundef @0, ptr noundef %21) call void @exit(i32 noundef -1) #11 unreachable 23: ; preds = %2 %24 = load ptr, ptr %5, align 8 %25 = getelementptr inbounds ptr, ptr %24, i64 1 %26 = load ptr, ptr %25, align 8 %27 = call ptr @"\01_fopen"(ptr noundef %26, ptr noundef @1) store ptr %27, ptr %10, align 8 %28 = icmp eq ptr %27, null br i1 %28, label %29, label %34 29: ; preds = %23 %30 = load ptr, ptr %5, align 8 %31 = getelementptr inbounds ptr, ptr %30, i64 1 %32 = load ptr, ptr %31, align 8 %33 = call i32 (ptr, ...) @printf(ptr noundef @2, ptr noundef %32) call void @exit(i32 noundef 1) #11 unreachable 34: ; preds = %23 %35 = call ptr @malloc(i64 noundef 40) #12 store ptr %35, ptr %6, align 8 %36 = load ptr, ptr %6, align 8 %37 = icmp ne ptr %36, null br i1 %37, label %39, label %38 38: ; preds = %34 call void @perror(ptr noundef @3) #13 call void @exit(i32 noundef 1) #11 unreachable 39: ; preds = %34 %40 = load ptr, ptr %6, align 8 %41 = load ptr, ptr %6, align 8 %42 = call i64 @llvm.objectsize.i64.p0(ptr %41, i1 false, i1 true, i1 false) %43 = call ptr @__memset_chk(ptr noundef %40, i32 noundef 0, i64 noundef 40, i64 noundef %42) #10 %44 = call ptr @malloc(i64 noundef 16) #12 %45 = load ptr, ptr %6, align 8 %46 = getelementptr inbounds %1, ptr %45, i32 0, i32 1 store ptr %44, ptr %46, align 8 %47 = load ptr, ptr %6, align 8 %48 = getelementptr inbounds %1, ptr %47, i32 0, i32 1 %49 = load ptr, ptr %48, align 8 %50 = icmp ne ptr %49, null br i1 %50, label %52, label %51 51: ; preds = %39 call void @perror(ptr noundef @4) #13 call void @exit(i32 noundef 1) #11 unreachable 52: ; preds = %39 %53 = load ptr, ptr %6, align 8 %54 = getelementptr inbounds %1, ptr %53, i32 0, i32 1 %55 = load ptr, ptr %54, align 8 %56 = load ptr, ptr %6, align 8 %57 = getelementptr inbounds %1, ptr %56, i32 0, i32 1 %58 = load ptr, ptr %57, align 8 %59 = call i64 @llvm.objectsize.i64.p0(ptr %58, i1 false, i1 true, i1 false) %60 = call ptr @__memset_chk(ptr noundef %55, i32 noundef 0, i64 noundef 16, i64 noundef %59) #10 %61 = load ptr, ptr %6, align 8 %62 = getelementptr inbounds %1, ptr %61, i32 0, i32 1 %63 = load ptr, ptr %62, align 8 store ptr %63, ptr %9, align 8 %64 = call ptr @malloc(i64 noundef 16) #12 %65 = load ptr, ptr %9, align 8 %66 = getelementptr inbounds %2, ptr %65, i32 0, i32 1 store ptr %64, ptr %66, align 8 %67 = load ptr, ptr %9, align 8 %68 = getelementptr inbounds %2, ptr %67, i32 0, i32 1 %69 = load ptr, ptr %68, align 8 %70 = icmp ne ptr %69, null br i1 %70, label %72, label %71 71: ; preds = %52 call void @perror(ptr noundef @5) #13 call void @exit(i32 noundef 1) #11 unreachable 72: ; preds = %52 %73 = load ptr, ptr %9, align 8 %74 = getelementptr inbounds %2, ptr %73, i32 0, i32 1 %75 = load ptr, ptr %74, align 8 %76 = load ptr, ptr %9, align 8 %77 = getelementptr inbounds %2, ptr %76, i32 0, i32 1 %78 = load ptr, ptr %77, align 8 %79 = call i64 @llvm.objectsize.i64.p0(ptr %78, i1 false, i1 true, i1 false) %80 = call ptr @__memset_chk(ptr noundef %75, i32 noundef 0, i64 noundef 1, i64 noundef %79) #10 %81 = load ptr, ptr %6, align 8 %82 = getelementptr inbounds %1, ptr %81, i32 0, i32 2 store i8 1, ptr %82, align 8 %83 = load ptr, ptr %6, align 8 %84 = load ptr, ptr %6, align 8 %85 = getelementptr inbounds %1, ptr %84, i32 0, i32 5 store ptr %83, ptr %85, align 8 %86 = load ptr, ptr %6, align 8 %87 = getelementptr inbounds %1, ptr %86, i32 0, i32 4 store ptr %83, ptr %87, align 8 br label %88 88: ; preds = %209, %72 %89 = getelementptr inbounds [128 x i8], ptr %11, i64 0, i64 0 %90 = load ptr, ptr %10, align 8 %91 = call ptr @fgets(ptr noundef %89, i32 noundef 128, ptr noundef %90) %92 = icmp ne ptr %91, null br i1 %92, label %93, label %210 93: ; preds = %88 %94 = getelementptr inbounds [128 x i8], ptr %11, i64 0, i64 0 %95 = call i32 (ptr, ptr, ...) @sscanf(ptr noundef %94, ptr noundef @6, ptr noundef %15, ptr noundef %13) %96 = call ptr @malloc(i64 noundef 40) #12 store ptr %96, ptr %7, align 8 %97 = load ptr, ptr %7, align 8 %98 = icmp ne ptr %97, null br i1 %98, label %100, label %99 99: ; preds = %93 call void @perror(ptr noundef @3) #13 call void @exit(i32 noundef 1) #11 unreachable 100: ; preds = %93 %101 = load ptr, ptr %7, align 8 %102 = load ptr, ptr %7, align 8 %103 = call i64 @llvm.objectsize.i64.p0(ptr %102, i1 false, i1 true, i1 false) %104 = call ptr @__memset_chk(ptr noundef %101, i32 noundef 0, i64 noundef 40, i64 noundef %103) #10 %105 = call ptr @malloc(i64 noundef 16) #12 %106 = load ptr, ptr %7, align 8 %107 = getelementptr inbounds %1, ptr %106, i32 0, i32 1 store ptr %105, ptr %107, align 8 %108 = load ptr, ptr %7, align 8 %109 = getelementptr inbounds %1, ptr %108, i32 0, i32 1 %110 = load ptr, ptr %109, align 8 %111 = icmp ne ptr %110, null br i1 %111, label %113, label %112 112: ; preds = %100 call void @perror(ptr noundef @4) #13 call void @exit(i32 noundef 1) #11 unreachable 113: ; preds = %100 %114 = load ptr, ptr %7, align 8 %115 = getelementptr inbounds %1, ptr %114, i32 0, i32 1 %116 = load ptr, ptr %115, align 8 %117 = load ptr, ptr %7, align 8 %118 = getelementptr inbounds %1, ptr %117, i32 0, i32 1 %119 = load ptr, ptr %118, align 8 %120 = call i64 @llvm.objectsize.i64.p0(ptr %119, i1 false, i1 true, i1 false) %121 = call ptr @__memset_chk(ptr noundef %116, i32 noundef 0, i64 noundef 16, i64 noundef %120) #10 %122 = load ptr, ptr %7, align 8 %123 = getelementptr inbounds %1, ptr %122, i32 0, i32 1 %124 = load ptr, ptr %123, align 8 store ptr %124, ptr %9, align 8 %125 = call ptr @malloc(i64 noundef 16) #12 %126 = load ptr, ptr %9, align 8 %127 = getelementptr inbounds %2, ptr %126, i32 0, i32 1 store ptr %125, ptr %127, align 8 %128 = load ptr, ptr %9, align 8 %129 = getelementptr inbounds %2, ptr %128, i32 0, i32 1 %130 = load ptr, ptr %129, align 8 %131 = icmp ne ptr %130, null br i1 %131, label %133, label %132 132: ; preds = %113 call void @perror(ptr noundef @5) #13 call void @exit(i32 noundef 1) #11 unreachable 133: ; preds = %113 %134 = load ptr, ptr %9, align 8 %135 = getelementptr inbounds %2, ptr %134, i32 0, i32 1 %136 = load ptr, ptr %135, align 8 %137 = load ptr, ptr %9, align 8 %138 = getelementptr inbounds %2, ptr %137, i32 0, i32 1 %139 = load ptr, ptr %138, align 8 %140 = call i64 @llvm.objectsize.i64.p0(ptr %139, i1 false, i1 true, i1 false) %141 = call ptr @__memset_chk(ptr noundef %136, i32 noundef 0, i64 noundef 1, i64 noundef %140) #10 %142 = getelementptr inbounds %0, ptr %13, i32 0, i32 0 %143 = load i32, ptr %142, align 4 %144 = zext i32 %143 to i64 %145 = load ptr, ptr %7, align 8 %146 = getelementptr inbounds %1, ptr %145, i32 0, i32 0 store i64 %144, ptr %146, align 8 %147 = load i64, ptr %14, align 8 %148 = call i1 @llvm.is.constant.i64(i64 %147) br i1 %148, label %149, label %169 149: ; preds = %133 %150 = load i64, ptr %14, align 8 %151 = trunc i64 %150 to i32 %152 = and i32 %151, -16777216 %153 = lshr i32 %152, 24 %154 = load i64, ptr %14, align 8 %155 = trunc i64 %154 to i32 %156 = and i32 %155, 16711680 %157 = lshr i32 %156, 8 %158 = or i32 %153, %157 %159 = load i64, ptr %14, align 8 %160 = trunc i64 %159 to i32 %161 = and i32 %160, 65280 %162 = shl i32 %161, 8 %163 = or i32 %158, %162 %164 = load i64, ptr %14, align 8 %165 = trunc i64 %164 to i32 %166 = and i32 %165, 255 %167 = shl i32 %166, 24 %168 = or i32 %163, %167 br label %173 169: ; preds = %133 %170 = load i64, ptr %14, align 8 %171 = trunc i64 %170 to i32 %172 = call i32 @10(i32 noundef %171) br label %173 173: ; preds = %169, %149 %174 = phi i32 [ %168, %149 ], [ %172, %169 ] %175 = zext i32 %174 to i64 %176 = load ptr, ptr %7, align 8 %177 = getelementptr inbounds %1, ptr %176, i32 0, i32 1 %178 = load ptr, ptr %177, align 8 %179 = getelementptr inbounds %2, ptr %178, i32 0, i32 0 store i64 %175, ptr %179, align 8 %180 = getelementptr inbounds %0, ptr %13, i32 0, i32 0 %181 = load i32, ptr %180, align 4 %182 = zext i32 %181 to i64 %183 = load ptr, ptr %6, align 8 %184 = call ptr @pat_search(i64 noundef %182, ptr noundef %183) store ptr %184, ptr %8, align 8 %185 = load ptr, ptr %8, align 8 %186 = getelementptr inbounds %1, ptr %185, i32 0, i32 0 %187 = load i64, ptr %186, align 8 %188 = getelementptr inbounds %0, ptr %13, i32 0, i32 0 %189 = load i32, ptr %188, align 4 %190 = zext i32 %189 to i64 %191 = icmp eq i64 %187, %190 br i1 %191, label %192, label %199 192: ; preds = %173 %193 = load float, ptr %15, align 4 %194 = fpext float %193 to double %195 = getelementptr inbounds %0, ptr %13, i32 0, i32 0 %196 = load i32, ptr %195, align 4 %197 = call i32 (ptr, ...) @printf(ptr noundef @7, double noundef %194, i32 noundef %196) %198 = call i32 (ptr, ...) @printf(ptr noundef @8) br label %203 199: ; preds = %173 %200 = load ptr, ptr %7, align 8 %201 = load ptr, ptr %6, align 8 %202 = call ptr @pat_insert(ptr noundef %200, ptr noundef %201) store ptr %202, ptr %7, align 8 br label %203 203: ; preds = %199, %192 %204 = load ptr, ptr %7, align 8 %205 = icmp ne ptr %204, null br i1 %205, label %209, label %206 206: ; preds = %203 %207 = load ptr, ptr @__stderrp, align 8 %208 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %207, ptr noundef @9) call void @exit(i32 noundef 1) #11 unreachable 209: ; preds = %203 br label %88 210: ; preds = %88 call void @exit(i32 noundef 0) #11 unreachable } ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1 declare i32 @printf(ptr noundef, ...) #2 ; Function Attrs: noreturn declare void @exit(i32 noundef) #3 declare ptr @"\01_fopen"(ptr noundef, ptr noundef) #2 ; Function Attrs: allocsize(0) declare ptr @malloc(i64 noundef) #4 ; Function Attrs: cold declare void @perror(ptr noundef) #5 ; Function Attrs: nounwind declare ptr @__memset_chk(ptr noundef, i32 noundef, i64 noundef, i64 noundef) #6 ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn declare i64 @llvm.objectsize.i64.p0(ptr, i1 immarg, i1 immarg, i1 immarg) #7 declare ptr @fgets(ptr noundef, i32 noundef, ptr noundef) #2 declare i32 @sscanf(ptr noundef, ptr noundef, ...) #2 ; Function Attrs: convergent nocallback nofree nosync nounwind readnone willreturn declare i1 @llvm.is.constant.i64(i64) #8 ; Function Attrs: inlinehint nounwind ssp uwtable define internal i32 @10(i32 noundef %0) #9 { %2 = alloca i32, align 4 store i32 %0, ptr %2, align 4 %3 = load i32, ptr %2, align 4 %4 = call i32 @llvm.bswap.i32(i32 %3) store i32 %4, ptr %2, align 4 %5 = load i32, ptr %2, align 4 ret i32 %5 } declare ptr @pat_search(i64 noundef, ptr noundef) #2 declare ptr @pat_insert(ptr noundef, ptr noundef) #2 declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2 ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn declare i32 @llvm.bswap.i32(i32) #7
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