Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
hello
생성일
2년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
62 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
124 행
복사
73 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
127 행
복사
복사
복사됨
복사
복사됨
define
ptr
@__crystal_main(i32 %argc, ptr %argv) {
define
%"(Int32 | String)"
@__crystal_main(i32 %argc, ptr %argv) {
alloca:
alloca:
%0 = alloca %"->", align 8
%0 = alloca %"->", align 8
%1 = alloca %"Slice(UInt64)", align 8
%1 = alloca %"Slice(UInt64)", align 8
%2 = alloca %"Slice(UInt8)", align 8
%2 = alloca %"Slice(UInt8)", align 8
복사
복사됨
복사
복사됨
%3 = alloca %"(Int32 | String)", align 8
br label %entry
br label %entry
entry:
entry:
store i32 %argc, ptr @ARGC_UNSAFE, align 4
store i32 %argc, ptr @ARGC_UNSAFE, align 4
store ptr %argv, ptr @ARGV_UNSAFE, align 8
store ptr %argv, ptr @ARGV_UNSAFE, align 8
store ptr @"'dacd97bcc'", ptr @"Crystal::BUILD_COMMIT", align 8
store ptr @"'dacd97bcc'", ptr @"Crystal::BUILD_COMMIT", align 8
store ptr @"'2024-10-09'", ptr @"Crystal::BUILD_DATE", align 8
store ptr @"'2024-10-09'", ptr @"Crystal::BUILD_DATE", align 8
store ptr @"'/app/.cache/crystal...'", ptr @"Crystal::CACHE_DIR", align 8
store ptr @"'/app/.cache/crystal...'", ptr @"Crystal::CACHE_DIR", align 8
store ptr @"'$ORIGIN/../share/cr...'", ptr @"Crystal::DEFAULT_PATH", align 8
store ptr @"'$ORIGIN/../share/cr...'", ptr @"Crystal::DEFAULT_PATH", align 8
store ptr @"'Crystal 1.14.0 [dac...'", ptr @"Crystal::DESCRIPTION", align 8
store ptr @"'Crystal 1.14.0 [dac...'", ptr @"Crystal::DESCRIPTION", align 8
store ptr @"'lib:/opt/compiler-e...'", ptr @"Crystal::PATH", align 8
store ptr @"'lib:/opt/compiler-e...'", ptr @"Crystal::PATH", align 8
store ptr @"'/opt/compiler-explo...'", ptr @"Crystal::LIBRARY_PATH", align 8
store ptr @"'/opt/compiler-explo...'", ptr @"Crystal::LIBRARY_PATH", align 8
store ptr @"'1.14.0'", ptr @"Crystal::VERSION", align 8
store ptr @"'1.14.0'", ptr @"Crystal::VERSION", align 8
store ptr @"'18.1.6'", ptr @"Crystal::LLVM_VERSION", align 8
store ptr @"'18.1.6'", ptr @"Crystal::LLVM_VERSION", align 8
store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::HOST_TRIPLE", align 8
store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::HOST_TRIPLE", align 8
store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::TARGET_TRIPLE", align 8
store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::TARGET_TRIPLE", align 8
복사
복사됨
복사
복사됨
%
3
= call ptr @__crystal_once_init()
%
4
= call ptr @__crystal_once_init()
store ptr %
3
, ptr @"~ONCE_STATE", align 8
store ptr %
4
, ptr @"~ONCE_STATE", align 8
call void @"~Crystal::ELF::MAGIC:const_init"()
call void @"~Crystal::ELF::MAGIC:const_init"()
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.2")
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.2")
call void @"~Exception::CallStack::CURRENT_DIR:const_init"()
call void @"~Exception::CallStack::CURRENT_DIR:const_init"()
복사
복사됨
복사
복사됨
%
4
= load ptr, ptr @"~ONCE_STATE", align 8
%
5
= load ptr, ptr @"~ONCE_STATE", align 8
call void @__crystal_once(ptr %
4
, ptr @"Exception::CallStack::skip:init", ptr @"~Exception::CallStack::skip:init")
call void @__crystal_once(ptr %
5
, ptr @"Exception::CallStack::skip:init", ptr @"~Exception::CallStack::skip:init")
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.4")
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.4")
call void @"~Exception::CallStack::empty:init"()
call void @"~Exception::CallStack::empty:init"()
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.5")
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.5")
call void @"~Iterator::Stop::INSTANCE:const_init"()
call void @"~Iterator::Stop::INSTANCE:const_init"()
call void @"~LibC::SIG_DFL:const_init"()
call void @"~LibC::SIG_DFL:const_init"()
call void @"~LibC::SIG_IGN:const_init"()
call void @"~LibC::SIG_IGN:const_init"()
call void @"~String::CHAR_TO_DIGIT:const_init"()
call void @"~String::CHAR_TO_DIGIT:const_init"()
call void @"~String::CHAR_TO_DIGIT62:const_init"()
call void @"~String::CHAR_TO_DIGIT62:const_init"()
call void @"~LibC::MAP_FAILED:const_init"()
call void @"~LibC::MAP_FAILED:const_init"()
복사
복사됨
복사
복사됨
%
5
= load ptr, ptr @"~ONCE_STATE", align 8
%
6
= load ptr, ptr @"~ONCE_STATE", align 8
call void @__crystal_once(ptr %
5
, ptr @"Process::INITIAL_PWD:const_init", ptr @"~Process::INITIAL_PWD:const_init")
call void @__crystal_once(ptr %
6
, ptr @"Process::INITIAL_PWD:const_init", ptr @"~Process::INITIAL_PWD:const_init")
call void @"~File::DEFAULT_CREATE_PERMISSIONS:const_init"()
call void @"~File::DEFAULT_CREATE_PERMISSIONS:const_init"()
복사
복사됨
복사
복사됨
%
6
= getelementptr inbounds %"->", ptr %0, i32 0, i32 0
%
7
= getelementptr inbounds %"->", ptr %0, i32 0, i32 0
store ptr @"~procProc(Nil)@/opt/compiler-explorer/crystal-1.14.0/share/crystal/src/gc/boehm.cr:459", ptr %
6
, align 8
store ptr @"~procProc(Nil)@/opt/compiler-explorer/crystal-1.14.0/share/crystal/src/gc/boehm.cr:459", ptr %
7
, align 8
%
7
= getelementptr inbounds %"->", ptr %0, i32 0, i32 1
%
8
= getelementptr inbounds %"->", ptr %0, i32 0, i32 1
store ptr null, ptr %
7
, align 8
store ptr null, ptr %
8
, align 8
%
8
= load %"->", ptr %0, align 8
%
9
= load %"->", ptr %0, align 8
call void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %
8
)
call void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %
9
)
%
9
= call %"Slice(UInt64)" @"*StaticArray(UInt64, 2)@StaticArray(T, N)#to_slice:Slice(UInt64)"(ptr @"Crystal::Hasher::seed")
%
10
= call %"Slice(UInt64)" @"*StaticArray(UInt64, 2)@StaticArray(T, N)#to_slice:Slice(UInt64)"(ptr @"Crystal::Hasher::seed")
store %"Slice(UInt64)" %
9
, ptr %1, align 8
store %"Slice(UInt64)" %
10
, ptr %1, align 8
%
10
= call %"Slice(UInt8)" @"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8)"(ptr %1)
%
11
= call %"Slice(UInt8)" @"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8)"(ptr %1)
store %"Slice(UInt8)" %
10
, ptr %2, align 8
store %"Slice(UInt8)" %
11
, ptr %2, align 8
%
11
= load %"Slice(UInt8)", ptr %2, align 8
%
12
= load %"Slice(UInt8)", ptr %2, align 8
call void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %
11
)
call void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %
12
)
call void @"~Int128::MIN:const_init"()
call void @"~Int128::MIN:const_init"()
call void @"~Int128::MAX:const_init"()
call void @"~Int128::MAX:const_init"()
call void @"~UInt128::MIN:const_init"()
call void @"~UInt128::MIN:const_init"()
call void @"~UInt128::MAX:const_init"()
call void @"~UInt128::MAX:const_init"()
복사
복사됨
복사
복사됨
%12 = load ptr, ptr @"~ONCE_STATE", align 8
call void @__crystal_once(ptr %12, ptr @"STDOUT:const_init", ptr @"~STDOUT:const_init")
%13 = load ptr, ptr @"~ONCE_STATE", align 8
%13 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %13,
ptr @"STDERR:const_init", ptr @"~STDERR:const_init")
call void @__crystal_once(ptr %13,
ptr @"STDOUT:const_init", ptr @"~STDOUT:const_init")
%
14
= call ptr @"*ENV::[]?<String>:(String | Nil)"(ptr @"'CRYSTAL_LOAD_DEBUG_...'")
%14 = load ptr, ptr @"~ONCE_STATE", align 8
%
15
= icmp eq ptr %
14
, null
call void @__crystal_once(ptr %14,
ptr @"STDERR:const_init", ptr @"~STDERR:const_init")
%
16
= select i1 %
15
, i32 0, i32 1
%
15
= call ptr @"*ENV::[]?<String>:(String | Nil)"(ptr @"'CRYSTAL_LOAD_DEBUG_...'")
%
17
= icmp eq i32 0, %
16
%
16
= icmp eq ptr %
15
, null
%
18
= and i1 %
17
, true
%
17
= select i1 %
16
, i32 0, i32 1
br i1 %
18
, label %current_def, label %next_def
%
18
= icmp eq i32 0, %
17
%
19
= and i1 %
18
, true
br i1 %
19
, label %current_def, label %next_def
then:
then:
call void @"*Exception::CallStack::load_debug_info:Nil"()
call void @"*Exception::CallStack::load_debug_info:Nil"()
br label %exit3
br label %exit3
else:
else:
br label %exit3
br label %exit3
current_def:
current_def:
br label %exit
br label %exit
next_def:
next_def:
복사
복사됨
복사
복사됨
%
19
= icmp eq i32 1, %
16
%
20
= icmp eq i32 1, %
17
%
20
= and i1 %
19
, true
%
21
= and i1 %
20
, true
br i1 %
20
, label %current_def1, label %next_def2
br i1 %
21
, label %current_def1, label %next_def2
exit:
exit:
복사
복사됨
복사
복사됨
%
21
= phi i1 [ false, %current_def ], [ %
22
, %current_def1 ]
%
22
= phi i1 [ false, %current_def ], [ %
23
, %current_def1 ]
br i1 %
21
, label %then, label %else
br i1 %
22
, label %then, label %else
current_def1:
current_def1:
복사
복사됨
복사
복사됨
%
22
= call i1 @"*String#==<String>:Bool"(ptr %
14
, ptr @"'1'")
%
23
= call i1 @"*String#==<String>:Bool"(ptr %
15
, ptr @"'1'")
br label %exit
br label %exit
next_def2:
next_def2:
unreachable
unreachable
exit3:
exit3:
복사
복사됨
복사
복사됨
%
23
= call %"(Int32 | Nil)" @"*Exception::CallStack::setup_crash_handler:(Int32 | Nil)"()
%
24
= call %"(Int32 | Nil)" @"*Exception::CallStack::setup_crash_handler:(Int32 | Nil)"()
call void @"*Crystal::Scheduler::init:Nil"()
call void @"*Crystal::Scheduler::init:Nil"()
call void @"*Crystal::System::Signal::setup_default_handlers:Nil"()
call void @"*Crystal::System::Signal::setup_default_handlers:Nil"()
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.27")
call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.27")
call void @"~Reference::ExecRecursive::exec_recursive:init"()
call void @"~Reference::ExecRecursive::exec_recursive:init"()
call void @"~Reference::ExecRecursiveClone::exec_recursive:init"()
call void @"~Reference::ExecRecursiveClone::exec_recursive:init"()
복사
복사됨
복사
복사됨
%24 = load ptr, ptr @"~ONCE_STATE", align 8
call void @__crystal_once(ptr %24, ptr @"Crystal::System::Signal::pipe:init", ptr @"~Crystal::System::Signal::pipe:init")
%25 = load ptr, ptr @"~ONCE_STATE", align 8
%25 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %25, ptr @"Crystal::System::Signal::
handlers
:init", ptr @"~Crystal::System::Signal::
handlers
:init")
call void @__crystal_once(ptr %25, ptr @"Crystal::System::Signal::
pipe
:init", ptr @"~Crystal::System::Signal::
pipe
:init")
%26 = load ptr, ptr @"~ONCE_STATE", align 8
%26 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %26, ptr @"Crystal::System::Signal::
sigset
:init", ptr @"~Crystal::System::Signal::
sigset
:init")
call void @__crystal_once(ptr %26, ptr @"Crystal::System::Signal::
handlers
:init", ptr @"~Crystal::System::Signal::
handlers
:init")
%27 = load ptr, ptr @"~ONCE_STATE", align 8
%27 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %27, ptr @"Crystal::System::Signal::
mutex
:init", ptr @"~Crystal::System::Signal::
mutex
:init")
call void @__crystal_once(ptr %27, ptr @"Crystal::System::Signal::
sigset
:init", ptr @"~Crystal::System::Signal::
sigset
:init")
%28 = load ptr, ptr @"~ONCE_STATE", align 8
%28 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %28, ptr @"Crystal::System::Signal::
setup_default_handlers
:init", ptr @"~Crystal::System::Signal::
setup_default_handlers
:init")
call void @__crystal_once(ptr %28, ptr @"Crystal::System::Signal::
mutex
:init", ptr @"~Crystal::System::Signal::
mutex
:init")
%29 = load ptr, ptr @"~ONCE_STATE", align 8
%29 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %29, ptr @"Crystal::System::Signal::setup_
seg
fault_handler
:init", ptr @"~Crystal::System::Signal::setup_
seg
fault_handler
:init")
call void @__crystal_once(ptr %29, ptr @"Crystal::System::Signal::setup_
de
fault_handler
s
:init", ptr @"~Crystal::System::Signal::setup_
de
fault_handler
s
:init")
%30 = load ptr, ptr @"~ONCE_STATE", align 8
%30 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %30, ptr @"Crystal::System::Signal::
segfault_handler:init", ptr @"~Crystal::System::Signal::se
gfault_handler:init")
call void @__crystal_once(ptr %30, ptr @"Crystal::System::Signal::
setup_
segfault_handler:init", ptr @"~Crystal::System::Signal::se
tup_se
gfault_handler:init")
%31 = load ptr, ptr @"~ONCE_STATE", align 8
%31 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %31, ptr @"Crystal::System::
SignalChildHandler::pending:
init", ptr @"~Crystal::System::
SignalChildHandler::pending:
init")
call void @__crystal_once(ptr %31, ptr @"Crystal::System::
Signal::segfault_handler:
init", ptr @"~Crystal::System::
Signal::segfault_handler:
init")
%32 = load ptr, ptr @"~ONCE_STATE", align 8
%32 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %32, ptr @"Crystal::System::SignalChildHandler::
waiting
:init", ptr @"~Crystal::System::SignalChildHandler::
waiting
:init")
call void @__crystal_once(ptr %32, ptr @"Crystal::System::SignalChildHandler::
pending
:init", ptr @"~Crystal::System::SignalChildHandler::
pending
:init")
%33 = load ptr, ptr @"~ONCE_STATE", align 8
%33 = load ptr, ptr @"~ONCE_STATE", align 8
복사
복사됨
복사
복사됨
call void @__crystal_once(ptr %33, ptr @"Crystal::System::SignalChildHandler:
:mutex:init", ptr @"~Crystal::System::SignalChildHandler::mutex:init")
call void @__crystal_once(ptr %33, ptr @"Crystal::System::SignalChildHandler:
:waiting:init", ptr @"~Crystal::System::SignalChildHandler::waiting:init")
%34 = load ptr, ptr @"~ONCE_STATE", align 8
call void @__crystal_once(ptr %34, ptr @"Crystal::System::SignalChildHandler:
:mutex:init", ptr @"~Crystal::System::SignalChildHandler::mutex:init")
call void @"~Time::Location::location_cache:init"()
call void @"~Time::Location::location_cache:init"()
복사
복사됨
복사
복사됨
%
34
= call
ptr
@"*hello<String>:
String
"(ptr @"'hello world'")
%
35
= call
%"(Int32 | String)"
@"*hello<String>:
(Int32 |
String
)
"(ptr @"'hello world'")
ret
ptr %3
4
store %"(Int32 | String)" %35,
ptr %3
, align 8
%36 = load %"(Int32 | String)", ptr %3, align 8
ret %"(Int32 | String)" %36
}
}
저장된 비교 결과
원본
파일 열기
define ptr @__crystal_main(i32 %argc, ptr %argv) { alloca: %0 = alloca %"->", align 8 %1 = alloca %"Slice(UInt64)", align 8 %2 = alloca %"Slice(UInt8)", align 8 br label %entry entry: store i32 %argc, ptr @ARGC_UNSAFE, align 4 store ptr %argv, ptr @ARGV_UNSAFE, align 8 store ptr @"'dacd97bcc'", ptr @"Crystal::BUILD_COMMIT", align 8 store ptr @"'2024-10-09'", ptr @"Crystal::BUILD_DATE", align 8 store ptr @"'/app/.cache/crystal...'", ptr @"Crystal::CACHE_DIR", align 8 store ptr @"'$ORIGIN/../share/cr...'", ptr @"Crystal::DEFAULT_PATH", align 8 store ptr @"'Crystal 1.14.0 [dac...'", ptr @"Crystal::DESCRIPTION", align 8 store ptr @"'lib:/opt/compiler-e...'", ptr @"Crystal::PATH", align 8 store ptr @"'/opt/compiler-explo...'", ptr @"Crystal::LIBRARY_PATH", align 8 store ptr @"'1.14.0'", ptr @"Crystal::VERSION", align 8 store ptr @"'18.1.6'", ptr @"Crystal::LLVM_VERSION", align 8 store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::HOST_TRIPLE", align 8 store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::TARGET_TRIPLE", align 8 %3 = call ptr @__crystal_once_init() store ptr %3, ptr @"~ONCE_STATE", align 8 call void @"~Crystal::ELF::MAGIC:const_init"() call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.2") call void @"~Exception::CallStack::CURRENT_DIR:const_init"() %4 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %4, ptr @"Exception::CallStack::skip:init", ptr @"~Exception::CallStack::skip:init") call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.4") call void @"~Exception::CallStack::empty:init"() call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.5") call void @"~Iterator::Stop::INSTANCE:const_init"() call void @"~LibC::SIG_DFL:const_init"() call void @"~LibC::SIG_IGN:const_init"() call void @"~String::CHAR_TO_DIGIT:const_init"() call void @"~String::CHAR_TO_DIGIT62:const_init"() call void @"~LibC::MAP_FAILED:const_init"() %5 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %5, ptr @"Process::INITIAL_PWD:const_init", ptr @"~Process::INITIAL_PWD:const_init") call void @"~File::DEFAULT_CREATE_PERMISSIONS:const_init"() %6 = getelementptr inbounds %"->", ptr %0, i32 0, i32 0 store ptr @"~procProc(Nil)@/opt/compiler-explorer/crystal-1.14.0/share/crystal/src/gc/boehm.cr:459", ptr %6, align 8 %7 = getelementptr inbounds %"->", ptr %0, i32 0, i32 1 store ptr null, ptr %7, align 8 %8 = load %"->", ptr %0, align 8 call void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %8) %9 = call %"Slice(UInt64)" @"*StaticArray(UInt64, 2)@StaticArray(T, N)#to_slice:Slice(UInt64)"(ptr @"Crystal::Hasher::seed") store %"Slice(UInt64)" %9, ptr %1, align 8 %10 = call %"Slice(UInt8)" @"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8)"(ptr %1) store %"Slice(UInt8)" %10, ptr %2, align 8 %11 = load %"Slice(UInt8)", ptr %2, align 8 call void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %11) call void @"~Int128::MIN:const_init"() call void @"~Int128::MAX:const_init"() call void @"~UInt128::MIN:const_init"() call void @"~UInt128::MAX:const_init"() %12 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %12, ptr @"STDOUT:const_init", ptr @"~STDOUT:const_init") %13 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %13, ptr @"STDERR:const_init", ptr @"~STDERR:const_init") %14 = call ptr @"*ENV::[]?<String>:(String | Nil)"(ptr @"'CRYSTAL_LOAD_DEBUG_...'") %15 = icmp eq ptr %14, null %16 = select i1 %15, i32 0, i32 1 %17 = icmp eq i32 0, %16 %18 = and i1 %17, true br i1 %18, label %current_def, label %next_def then: call void @"*Exception::CallStack::load_debug_info:Nil"() br label %exit3 else: br label %exit3 current_def: br label %exit next_def: %19 = icmp eq i32 1, %16 %20 = and i1 %19, true br i1 %20, label %current_def1, label %next_def2 exit: %21 = phi i1 [ false, %current_def ], [ %22, %current_def1 ] br i1 %21, label %then, label %else current_def1: %22 = call i1 @"*String#==<String>:Bool"(ptr %14, ptr @"'1'") br label %exit next_def2: unreachable exit3: %23 = call %"(Int32 | Nil)" @"*Exception::CallStack::setup_crash_handler:(Int32 | Nil)"() call void @"*Crystal::Scheduler::init:Nil"() call void @"*Crystal::System::Signal::setup_default_handlers:Nil"() call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.27") call void @"~Reference::ExecRecursive::exec_recursive:init"() call void @"~Reference::ExecRecursiveClone::exec_recursive:init"() %24 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %24, ptr @"Crystal::System::Signal::pipe:init", ptr @"~Crystal::System::Signal::pipe:init") %25 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %25, ptr @"Crystal::System::Signal::handlers:init", ptr @"~Crystal::System::Signal::handlers:init") %26 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %26, ptr @"Crystal::System::Signal::sigset:init", ptr @"~Crystal::System::Signal::sigset:init") %27 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %27, ptr @"Crystal::System::Signal::mutex:init", ptr @"~Crystal::System::Signal::mutex:init") %28 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %28, ptr @"Crystal::System::Signal::setup_default_handlers:init", ptr @"~Crystal::System::Signal::setup_default_handlers:init") %29 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %29, ptr @"Crystal::System::Signal::setup_segfault_handler:init", ptr @"~Crystal::System::Signal::setup_segfault_handler:init") %30 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %30, ptr @"Crystal::System::Signal::segfault_handler:init", ptr @"~Crystal::System::Signal::segfault_handler:init") %31 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %31, ptr @"Crystal::System::SignalChildHandler::pending:init", ptr @"~Crystal::System::SignalChildHandler::pending:init") %32 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %32, ptr @"Crystal::System::SignalChildHandler::waiting:init", ptr @"~Crystal::System::SignalChildHandler::waiting:init") %33 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %33, ptr @"Crystal::System::SignalChildHandler::mutex:init", ptr @"~Crystal::System::SignalChildHandler::mutex:init") call void @"~Time::Location::location_cache:init"() %34 = call ptr @"*hello<String>:String"(ptr @"'hello world'") ret ptr %34 }
수정본
파일 열기
define %"(Int32 | String)" @__crystal_main(i32 %argc, ptr %argv) { alloca: %0 = alloca %"->", align 8 %1 = alloca %"Slice(UInt64)", align 8 %2 = alloca %"Slice(UInt8)", align 8 %3 = alloca %"(Int32 | String)", align 8 br label %entry entry: store i32 %argc, ptr @ARGC_UNSAFE, align 4 store ptr %argv, ptr @ARGV_UNSAFE, align 8 store ptr @"'dacd97bcc'", ptr @"Crystal::BUILD_COMMIT", align 8 store ptr @"'2024-10-09'", ptr @"Crystal::BUILD_DATE", align 8 store ptr @"'/app/.cache/crystal...'", ptr @"Crystal::CACHE_DIR", align 8 store ptr @"'$ORIGIN/../share/cr...'", ptr @"Crystal::DEFAULT_PATH", align 8 store ptr @"'Crystal 1.14.0 [dac...'", ptr @"Crystal::DESCRIPTION", align 8 store ptr @"'lib:/opt/compiler-e...'", ptr @"Crystal::PATH", align 8 store ptr @"'/opt/compiler-explo...'", ptr @"Crystal::LIBRARY_PATH", align 8 store ptr @"'1.14.0'", ptr @"Crystal::VERSION", align 8 store ptr @"'18.1.6'", ptr @"Crystal::LLVM_VERSION", align 8 store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::HOST_TRIPLE", align 8 store ptr @"'x86_64-unknown-linu...'", ptr @"Crystal::TARGET_TRIPLE", align 8 %4 = call ptr @__crystal_once_init() store ptr %4, ptr @"~ONCE_STATE", align 8 call void @"~Crystal::ELF::MAGIC:const_init"() call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.2") call void @"~Exception::CallStack::CURRENT_DIR:const_init"() %5 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %5, ptr @"Exception::CallStack::skip:init", ptr @"~Exception::CallStack::skip:init") call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.4") call void @"~Exception::CallStack::empty:init"() call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.5") call void @"~Iterator::Stop::INSTANCE:const_init"() call void @"~LibC::SIG_DFL:const_init"() call void @"~LibC::SIG_IGN:const_init"() call void @"~String::CHAR_TO_DIGIT:const_init"() call void @"~String::CHAR_TO_DIGIT62:const_init"() call void @"~LibC::MAP_FAILED:const_init"() %6 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %6, ptr @"Process::INITIAL_PWD:const_init", ptr @"~Process::INITIAL_PWD:const_init") call void @"~File::DEFAULT_CREATE_PERMISSIONS:const_init"() %7 = getelementptr inbounds %"->", ptr %0, i32 0, i32 0 store ptr @"~procProc(Nil)@/opt/compiler-explorer/crystal-1.14.0/share/crystal/src/gc/boehm.cr:459", ptr %7, align 8 %8 = getelementptr inbounds %"->", ptr %0, i32 0, i32 1 store ptr null, ptr %8, align 8 %9 = load %"->", ptr %0, align 8 call void @"*GC::before_collect<&Proc(Nil)>:Nil"(%"->" %9) %10 = call %"Slice(UInt64)" @"*StaticArray(UInt64, 2)@StaticArray(T, N)#to_slice:Slice(UInt64)"(ptr @"Crystal::Hasher::seed") store %"Slice(UInt64)" %10, ptr %1, align 8 %11 = call %"Slice(UInt8)" @"*Slice(UInt64)@Slice(T)#to_unsafe_bytes:Slice(UInt8)"(ptr %1) store %"Slice(UInt8)" %11, ptr %2, align 8 %12 = load %"Slice(UInt8)", ptr %2, align 8 call void @"*Crystal::System::Random::random_bytes<Slice(UInt8)>:Nil"(%"Slice(UInt8)" %12) call void @"~Int128::MIN:const_init"() call void @"~Int128::MAX:const_init"() call void @"~UInt128::MIN:const_init"() call void @"~UInt128::MAX:const_init"() %13 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %13, ptr @"STDOUT:const_init", ptr @"~STDOUT:const_init") %14 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %14, ptr @"STDERR:const_init", ptr @"~STDERR:const_init") %15 = call ptr @"*ENV::[]?<String>:(String | Nil)"(ptr @"'CRYSTAL_LOAD_DEBUG_...'") %16 = icmp eq ptr %15, null %17 = select i1 %16, i32 0, i32 1 %18 = icmp eq i32 0, %17 %19 = and i1 %18, true br i1 %19, label %current_def, label %next_def then: call void @"*Exception::CallStack::load_debug_info:Nil"() br label %exit3 else: br label %exit3 current_def: br label %exit next_def: %20 = icmp eq i32 1, %17 %21 = and i1 %20, true br i1 %21, label %current_def1, label %next_def2 exit: %22 = phi i1 [ false, %current_def ], [ %23, %current_def1 ] br i1 %22, label %then, label %else current_def1: %23 = call i1 @"*String#==<String>:Bool"(ptr %15, ptr @"'1'") br label %exit next_def2: unreachable exit3: %24 = call %"(Int32 | Nil)" @"*Exception::CallStack::setup_crash_handler:(Int32 | Nil)"() call void @"*Crystal::Scheduler::init:Nil"() call void @"*Crystal::System::Signal::setup_default_handlers:Nil"() call void @"*Exception::CallStack::skip<String>:Nil"(ptr @"'/opt/compiler-explo...'.27") call void @"~Reference::ExecRecursive::exec_recursive:init"() call void @"~Reference::ExecRecursiveClone::exec_recursive:init"() %25 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %25, ptr @"Crystal::System::Signal::pipe:init", ptr @"~Crystal::System::Signal::pipe:init") %26 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %26, ptr @"Crystal::System::Signal::handlers:init", ptr @"~Crystal::System::Signal::handlers:init") %27 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %27, ptr @"Crystal::System::Signal::sigset:init", ptr @"~Crystal::System::Signal::sigset:init") %28 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %28, ptr @"Crystal::System::Signal::mutex:init", ptr @"~Crystal::System::Signal::mutex:init") %29 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %29, ptr @"Crystal::System::Signal::setup_default_handlers:init", ptr @"~Crystal::System::Signal::setup_default_handlers:init") %30 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %30, ptr @"Crystal::System::Signal::setup_segfault_handler:init", ptr @"~Crystal::System::Signal::setup_segfault_handler:init") %31 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %31, ptr @"Crystal::System::Signal::segfault_handler:init", ptr @"~Crystal::System::Signal::segfault_handler:init") %32 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %32, ptr @"Crystal::System::SignalChildHandler::pending:init", ptr @"~Crystal::System::SignalChildHandler::pending:init") %33 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %33, ptr @"Crystal::System::SignalChildHandler::waiting:init", ptr @"~Crystal::System::SignalChildHandler::waiting:init") %34 = load ptr, ptr @"~ONCE_STATE", align 8 call void @__crystal_once(ptr %34, ptr @"Crystal::System::SignalChildHandler::mutex:init", ptr @"~Crystal::System::SignalChildHandler::mutex:init") call void @"~Time::Location::location_cache:init"() %35 = call %"(Int32 | String)" @"*hello<String>:(Int32 | String)"(ptr @"'hello world'") store %"(Int32 | String)" %35, ptr %3, align 8 %36 = load %"(Int32 | String)", ptr %3, align 8 ret %"(Int32 | String)" %36 }
비교하기