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
Helion
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
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" target triple = "x86_64-sie-ps5" ; Function Attrs: strictfp define float @_ZN2xx2yyEfb(ptr %this, float %cm, i1 %0) #0 { entry: call void null(ptr null) #0 %cmp = call i1 @llvm.experimental.constrained.fcmps.f32(float %cm, float 0.000000e+00, metadata !"ole", metadata !"fpexcept.strict") #0 %call = call i32 null(ptr null) #0 call void null(ptr null, i32 0) #0 call void null(ptr null, i32 0) #0 %call2 = call i32 null(ptr null) #0 %1 = load i32, ptr null, align 4 %shr = lshr i32 0, 0 store i32 0, ptr null, align 4 call void null(ptr null, i32 0) #0 call void null(ptr null, i32 0) #0 %call3 = call ptr null(ptr null) #0 %2 = load i32, ptr null, align 4 %call4 = call ptr null(ptr null, i32 0) #0 %conv = sext i32 0 to i64 %mul = mul i64 0, 0 call void null(ptr null, i32 0) #0 %3 = load i8, ptr null, align 1 %conv6 = zext i1 false to i64 br label %if.then if.then: ; preds = %entry %mul7 = mul i32 0, 0 call void null(ptr null, i32 0) #0 br label %if.end if.end: ; preds = %if.then %call8 = call ptr null(ptr null) #0 call void @llvm.memcpy.p0.p0.i64(ptr null, ptr null, i64 0, i1 false) #0 br label %for.cond for.cond: ; preds = %if.end %call9 = call i1 null(ptr null, ptr null) #0 br label %for.body for.cond.cleanup: ; No predecessors! br label %cleanup78 for.body: ; preds = %for.cond %call10 = call ptr null(ptr null) #0 %4 = load i32, ptr null, align 4 %call11 = call i32 null(ptr null, i32 0) #0 %call12 = call ptr null(ptr null) #0 %5 = load i32, ptr null, align 4 %call14 = call i1 null(ptr null, i32 0) #0 br i1 false, label %if.then15, label %if.end36 if.then15: ; preds = %for.body %call16 = call ptr null(ptr null) #0 %6 = load i32, ptr null, align 4 %call18 = call i1 null(ptr null, i32 0) #0 br label %if.end31 if.then19: ; No predecessors! %call20 = call ptr null(ptr null) #0 %7 = load i32, ptr null, align 4 %call22 = call i32 null(ptr null, i32 0) #0 %tobool23 = icmp ne i32 0, 0 br label %if.then24 if.then24: ; preds = %if.then19 %shl = shl i32 0, 0 %and = and i32 0, 0 %or = or i32 0, 0 store i32 0, ptr null, align 4 br label %if.end28 if.else: ; No predecessors! %shl25 = shl i32 0, 0 %and26 = and i32 0, 0 %or27 = or i32 0, 0 store i32 0, ptr null, align 4 br label %if.end28 if.end28: ; preds = %if.else, %if.then24 %call29 = call i32 null(ptr null) #0 store i32 0, ptr null, align 4 %call30 = call i8 null(ptr null, ptr null, ptr null) #0 br label %if.end31 if.end31: ; preds = %if.end28, %if.then15 %call32 = call ptr null(ptr null) #0 %8 = load i32, ptr null, align 4 %call34 = call i32 null(ptr null, i32 0) #0 call void null(ptr null, i32 0) #0 %call35 = call ptr null(ptr null, i32 0) #0 call void null(ptr null, ptr null) #0 br label %if.end36 if.end36: ; preds = %if.end31, %for.body %call37 = call i32 null(ptr null) #0 %call38 = call i32 null(ptr null) #0 %call39 = call i32 null(ptr null) #0 %tobool40 = icmp ne i32 0, 0 br label %if.then41 if.then41: ; preds = %if.end36 %call42 = call ptr null(ptr null) #0 %dd.sroa.0.0.copyload = load i64, ptr null, align 4 %dd.sroa.4.0.copyload = load i32, ptr null, align 4 %call43 = call ptr null(ptr null) #0 call void null(ptr null, i64 0, i32 0) #0 %call44 = call ptr null(ptr null) #0 %call45 = call ptr null(ptr null) #0 call void null(ptr null, i32 0) #0 %call46 = call ptr null(ptr null) #0 call void null(ptr null, i32 0) #0 %call47 = call ptr null(ptr null) #0 %call48 = call i32 null(ptr null) #0 %tobool49 = icmp ne i32 0, 0 br i1 false, label %if.then50, label %if.else54 if.then50: ; preds = %if.then41 %call51 = call ptr null(ptr null) #0 %9 = load i32, ptr null, align 4 %call52 = call ptr null(ptr null) #0 store i32 0, ptr null, align 4 call void null(ptr null, ptr null) #0 br label %cleanup if.else54: ; preds = %if.then41 br label %cleanup cleanup: ; preds = %if.else54, %if.then50 %cond302 = icmp eq i32 0, 0 br label %cleanup73 if.end56: ; No predecessors! %call57 = call i32 null(ptr null) #0 call void null(ptr null) #0 call void null(ptr null, ptr null) #0 call void null(ptr null, i32 0) #0 br label %for.cond58 for.cond58: ; preds = %for.body61, %if.end56 %tobool59 = icmp ne i32 0, 0 br label %for.body61 for.cond.cleanup60: ; No predecessors! br label %cleanup73 for.body61: ; preds = %for.cond58 %cmp62 = icmp slt i32 0, 0 %conv63 = zext i1 false to i32 store i32 0, ptr null, align 4 %call65 = call i32 null(ptr null) #0 store i32 0, ptr null, align 4 call void null(ptr null, ptr null, ptr null) #0 %call67 = call ptr null(ptr null) #0 %call68 = call ptr null(ptr null, i32 0) #0 %10 = load i32, ptr null, align 4 call void null(ptr null, i32 0) #0 %call69 = call ptr null(ptr null, i32 0) #0 call void null(ptr null, ptr null) #0 %call70 = call ptr null(ptr null, i32 0) #0 call void null(ptr null, ptr null) #0 %call71 = call ptr null(ptr null, i32 0) #0 call void null(ptr null, ptr null) #0 %inc = add i32 0, 0 br label %for.cond58 cleanup73: ; preds = %for.cond.cleanup60, %cleanup %cond301 = icmp eq i32 0, 0 br label %cleanup78 cleanup78: ; preds = %cleanup73, %for.cond.cleanup %cond = icmp eq i32 0, 0 br label %cleanup282 for.end80: ; No predecessors! call void null(ptr null, i32 0) #0 %call81 = call i32 null(ptr null) #0 call void null(ptr null, i32 0) #0 %call82 = call i32 null(ptr null) #0 call void null(ptr null, i32 0) #0 call void null(ptr null) #0 %call85 = call ptr null(ptr null) #0 %call86 = call ptr null(ptr null) #0 br label %for.cond87 for.cond87: ; preds = %if.end105, %for.end80 %cmp88 = icmp ne ptr null, null br label %for.cond.cleanup89 for.cond.cleanup89: ; preds = %for.cond87 %call128 = call i32 null(ptr null) #0 call void null(ptr null, i32 0) #0 br label %for.cond129 for.body90: ; No predecessors! %cw91.sroa.0.0.copyload = load i32, ptr null, align 4 %cw91.sroa.7.0.copyload = load i32, ptr null, align 4 call void null(ptr null) #0 %call93 = call ptr null(ptr null, i32 0) #0 call void null(ptr null, i32 0) #0 %call98 = call ptr null(ptr null, i32 0) #0 %11 = load float, ptr null, align 4 %tobool99 = call i1 @llvm.experimental.constrained.fcmp.f32(float 0.000000e+00, float 0.000000e+00, metadata !"une", metadata !"fpexcept.strict") #0 br label %if.then100 if.then100: ; preds = %for.body90 %call102 = call ptr null(ptr null, i32 0) #0 %12 = load float, ptr null, align 4 %conv104 = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float 0.000000e+00, metadata !"fpexcept.strict") #0 store i32 0, ptr null, align 4 br label %if.end105 if.end105: ; preds = %if.then100 %cmp107 = icmp sgt i32 0, 0 %conv108 = zext i1 false to i32 %call109 = call ptr null(ptr null, i32 0) #0 %13 = load i8, ptr null, align 1 %conv111 = zext i1 false to i32 %call112 = call ptr null(ptr null, i32 0) #0 %14 = load i8, ptr null, align 1 %conv114 = zext i1 false to i32 %sub = sub i32 0, 0 %tobool115 = icmp ne i32 0, 0 %storedv116 = zext i1 false to i8 store i8 0, ptr null, align 1 %conv117 = zext i1 false to i32 %sub119 = sub i32 0, 0 call void null(ptr null, i32 0) #0 call void null(ptr null, i32 0) #0 br label %for.cond87 for.cond129: ; preds = %for.inc147, %for.cond.cleanup89 %15 = load i32, ptr null, align 4 %tobool130 = icmp ne i32 0, 0 br label %lor.rhs lor.rhs: ; preds = %for.cond129 %16 = load float, ptr null, align 4 %tobool131 = call i1 @llvm.experimental.constrained.fcmp.f32(float 0.000000e+00, float 0.000000e+00, metadata !"une", metadata !"fpexcept.strict") #0 br label %for.body132 for.body132: ; preds = %lor.rhs %17 = load i8, ptr null, align 1 br label %if.then134 if.then134: ; preds = %for.body132 %call135 = call i32 null(ptr null) #0 %tobool136 = icmp ne i32 0, 0 br i1 false, label %if.then137, label %for.inc147 if.then137: ; preds = %if.then134 %call138 = call i32 null(ptr null) #0 %tobool139 = icmp ne i32 0, 0 br label %if.then140 if.then140: ; preds = %if.then137 %call141 = call ptr null(ptr null, i32 0) #0 %call142 = call i32 null(ptr null) #0 %18 = load i32, ptr null, align 4 %call143 = call ptr null(ptr null, i32 0) #0 store i32 0, ptr null, align 4 br label %for.inc147 for.inc147: ; preds = %if.then140, %if.then134 %19 = load i32, ptr null, align 4 %dec = add i32 0, 0 store i32 0, ptr null, align 4 br label %for.cond129 for.end148: ; No predecessors! %20 = load i32, ptr null, align 4 %call149 = call ptr null(ptr null, i32 0) #0 call void null(ptr null, ptr null) #0 %21 = load i32, ptr null, align 4 call void null(ptr null, i32 0) #0 %call151 = call i32 null(ptr null) #0 br label %for.cond153 for.cond153: ; preds = %cleanup189, %for.end148 call void null(ptr null, i32 0) #0 %call158 = call i1 null(ptr null) #0 br label %for.body160 for.cond.cleanup159: ; No predecessors! %call200 = call ptr null(ptr null) #0 %call202 = call ptr null(ptr null) #0 br label %for.cond203 for.body160: ; preds = %for.cond153 %call163 = call i32 null(ptr null, i32 0) #0 store i32 0, ptr null, align 4 %shr164 = lshr i32 0, 0 %22 = load i32, ptr null, align 4 %and165 = and i32 0, 0 store i32 0, ptr null, align 4 %call168 = call ptr null(ptr null, i32 0) #0 %23 = load i32, ptr null, align 4 store i32 0, ptr null, align 4 %24 = load i32, ptr null, align 4 %tobool169 = icmp ne i32 0, 0 %25 = load i32, ptr null, align 4 %tobool170 = icmp ne i32 0, 0 %or.cond = select i1 false, i1 false, i1 false %or.cond.not = xor i1 false, false %tobool172 = icmp ne i32 0, 0 %or.cond303 = select i1 false, i1 false, i1 false br i1 false, label %if.end180, label %if.else174 if.else174: ; preds = %for.body160 %26 = load i32, ptr null, align 4 %tobool175 = icmp ne i32 0, 0 br label %if.then176 if.then176: ; preds = %if.else174 store i32 0, ptr null, align 4 br label %if.end180 if.else177: ; No predecessors! br label %cleanup189 if.end180: ; preds = %if.then176, %for.body160 %27 = load i32, ptr null, align 4 %28 = load i32, ptr null, align 4 %cmp181 = icmp sgt i32 0, 0 br label %if.then182 if.then182: ; preds = %if.end180 call void null(ptr null, ptr null) #0 br label %if.end183 if.end183: ; preds = %if.then182 %29 = load i32, ptr null, align 4 %shl184 = shl i32 0, 0 %30 = load i32, ptr null, align 4 %and185 = and i32 0, 0 %or186 = or i32 0, 0 store i32 0, ptr null, align 4 call void null(ptr null, ptr null, ptr null) #0 call void null(ptr null, i32 0) #0 br label %cleanup189 cleanup189: ; preds = %if.end183, %if.else177 call void null(ptr null) #0 br label %for.cond153 for.cond203: ; preds = %if.end222, %for.cond.cleanup159 %cmp204 = icmp ne ptr null, null br label %for.cond.cleanup205 for.cond.cleanup205: ; preds = %for.cond203 call void null(ptr null, i32 0) #0 call void null(ptr null) #0 %call234 = call ptr null(ptr null) #0 %call236 = call ptr null(ptr null) #0 br label %for.cond237 for.body206: ; No predecessors! %lll.sroa.0.0.copyload = load i32, ptr null, align 4 %lll.sroa.4.0.copyload = load i32, ptr null, align 4 store i32 0, ptr null, align 4 store i32 0, ptr null, align 4 %call212 = call i8 null(ptr null, ptr null, ptr null) #0 br label %if.then215 if.then215: ; preds = %for.body206 %31 = load i32, ptr null, align 4 %call216 = call ptr null(ptr null, i32 0) #0 %32 = load i32, ptr null, align 4 call void null(ptr null) #0 call void null(ptr null) #0 call void null(ptr null, i32 0) #0 br label %if.end222 if.end222: ; preds = %if.then215 br label %for.cond203 for.cond237: ; preds = %if.end251, %for.cond.cleanup205 %cmp238 = icmp ne ptr null, null br label %for.cond.cleanup239 for.cond.cleanup239: ; preds = %for.cond237 %sub260 = sub i32 0, 0 br label %for.cond261 for.body240: ; No predecessors! %cw241.sroa.3.0.copyload = load i32, ptr null, align 4 %call243 = call ptr null(ptr null, i32 0) #0 %33 = load float, ptr null, align 4 %tobool245 = call i1 @llvm.experimental.constrained.fcmp.f32(float 0.000000e+00, float 0.000000e+00, metadata !"une", metadata !"fpexcept.strict") #0 br label %if.then246 if.then246: ; preds = %for.body240 %call248 = call ptr null(ptr null, i32 0) #0 %34 = load float, ptr null, align 4 %conv250 = call i32 @llvm.experimental.constrained.fptoui.i32.f32(float 0.000000e+00, metadata !"fpexcept.strict") #0 store i32 0, ptr null, align 4 br label %if.end251 if.end251: ; preds = %if.then246 br label %for.cond237 for.cond261: ; preds = %for.inc269, %for.cond.cleanup239 %tobool262 = icmp ne i32 0, 0 br label %for.body264 for.cond.cleanup263: ; No predecessors! call void null(ptr null) #0 %35 = load i32, ptr null, align 4 %tobool273 = icmp ne i32 0, 0 %lnot = xor i1 false, false %conv274 = zext i1 false to i64 br label %if.end281 for.body264: ; preds = %for.cond261 %call265 = call ptr null(ptr null, i32 0) #0 %36 = load i8, ptr null, align 1 br label %if.then267 if.then267: ; preds = %for.body264 call void null(ptr null) #0 br label %for.inc269 for.inc269: ; preds = %if.then267 %dec270 = add i32 0, 0 br label %for.cond261 if.then277: ; No predecessors! %call278 = load i1, ptr null, align 1 br label %if.then279 if.then279: ; preds = %if.then277 store i32 0, ptr null, align 4 br label %if.end281 if.end281: ; preds = %if.then279, %for.cond.cleanup263 br label %cleanup282 cleanup282: ; preds = %if.end281, %cleanup78 %cond300 = icmp eq i32 0, 0 br label %cleanup.cont291 cleanup.cont291: ; preds = %cleanup282 call void null(ptr null, i32 0) #0 store i32 0, ptr null, align 4 %call293 = call ptr null(ptr null) #0 %call294 = call i32 null(ptr null) #0 %call295 = call float @_ZN2xx2yyEfb(ptr null, float 0.000000e+00, i1 false) #0 unreachable cleanup296: ; No predecessors! ret float 0.000000e+00 } ; Function Attrs: nocallback nofree nosync nounwind strictfp willreturn memory(inaccessiblemem: readwrite) declare i1 @llvm.experimental.constrained.fcmps.f32(float, float, metadata, metadata) #1 ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2 ; Function Attrs: nocallback nofree nosync nounwind strictfp willreturn memory(inaccessiblemem: readwrite) declare i1 @llvm.experimental.constrained.fcmp.f32(float, float, metadata, metadata) #1 ; Function Attrs: nocallback nofree nosync nounwind strictfp willreturn memory(inaccessiblemem: readwrite) declare i32 @llvm.experimental.constrained.fptoui.i32.f32(float, metadata) #1 ; uselistorder directives uselistorder ptr @llvm.experimental.constrained.fcmp.f32, { 2, 1, 0 } uselistorder ptr @llvm.experimental.constrained.fptoui.i32.f32, { 1, 0 } attributes #0 = { strictfp } attributes #1 = { nocallback nofree nosync nounwind strictfp willreturn memory(inaccessiblemem: readwrite) } attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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