์ด๊ฒ์ Ubuntu Online, Fedora Online, Windows ์จ๋ผ์ธ ์๋ฎฌ๋ ์ดํฐ ๋๋ MAC OS ์จ๋ผ์ธ ์๋ฎฌ๋ ์ดํฐ์ ๊ฐ์ ์ฌ๋ฌ ๋ฌด๋ฃ ์จ๋ผ์ธ ์ํฌ์คํ ์ด์ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ OnWorks ๋ฌด๋ฃ ํธ์คํ ์ ๊ณต์ ์ฒด์์ ์คํํ ์ ์๋ FileCheck-3.6 ๋ช ๋ น์ ๋๋ค.
ํ๋ก๊ทธ๋จ:
์ด๋ฆ
FileCheck - ์ ์ฐํ ํจํด ๋งค์นญ ํ์ผ ๊ฒ์ฆ๊ธฐ
๊ฐ์
ํ์ผ ๊ฒ์ฌ ์ผ์น ํ์ผ ์ด๋ฆ [--check-์ ๋์ฌ=XXX] [--์๊ฒฉํ ๊ณต๋ฐฑ]
๊ธฐ์
ํ์ผ ๊ฒ์ฌ ๋ ๊ฐ์ ํ์ผ์ ์ฝ์ต๋๋ค(ํ๋๋ ํ์ค ์ ๋ ฅ์์, ๋ค๋ฅธ ํ๋๋ ๋ช ๋ น์ค์์ ์ง์ )
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๋๋ฅผ ํ์ธํฉ๋๋ค. ์ด ๋์์ ํ ์คํธ ์ํธ์ ํนํ ์ ์ฉํฉ๋๋ค.
์ด๋ค ๋๊ตฌ(์: LLC) ์์ ํฌํจ
์ ๋ณด(์: esp์ movsd ๋๋ ํฅ๋ฏธ๋ก์ด ๊ฒ). ์ด๊ฒ์ ๋น์ทํ๋ค
์ฌ์ฉ ๋ฐฉ๋ฒ GREP, ๊ทธ๋ฌ๋ ํ๋์ ํ์ผ์์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ์ ๋ ฅ์ ์ผ์น์ํค๋ ๋ฐ ์ต์ ํ๋์ด ์์ต๋๋ค.
ํน์ ์ฃผ๋ฌธ.
XNUMXD๋ดํ์ ์ผ์น ํ์ผ ์ด๋ฆ file์ ์ผ์น์ํฌ ํจํด์ด ํฌํจ๋ ํ์ผ์ ์ง์ ํฉ๋๋ค. ํ์ผ
ํ์ธํ๋ ค๋ฉด ํ์ค ์ ๋ ฅ์์ ์ฝ์ด์ผ ํฉ๋๋ค. --์ ๋ ฅ ํ์ผ ์ต์ ์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ต์
-๋์ ๋ช ๋ น์ค ์ต์ ์ ์์ฝ์ ์ธ์ํฉ๋๋ค.
--check-์ ๋์ฌ ์ ๋์ฌ
FileCheck๋ ๋ค์์ ๋ด์ฉ์ ๊ฒ์ํฉ๋๋ค. ์ผ์น ํ์ผ ์ด๋ฆ ํจํด์ด ์ผ์นํ๋๋ก ํฉ๋๋ค. ์ ์ํด
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฌํ ํจํด์๋ "๊ฒ์ฌ:". ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด
๋ค๋ฅธ ์ ๋์ฌ(์: ๋์ผํ ์ ๋ ฅ ํ์ผ์ด ์ฌ๋ฌ ๊ฐ์ ์๋ก ๋ค๋ฅธ
๋๊ตฌ ๋๋ ์ต์ ), --check-์ ๋์ฌ ์ธ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ ์ด์์ ์ง์ ํ ์ ์์ต๋๋ค.
์ผ์นํ๋ ์ ๋์ฌ. ๋ค์ค ์ ๋์ฌ๋ ๋ค์์ ๋ํด ๋ณ๊ฒฝ๋ ์ ์๋ ํ ์คํธ์ ์ ์ฉํฉ๋๋ค.
์คํ ์ต์ ์ ๋ค๋ฅด์ง๋ง ๋๋ถ๋ถ์ ํ์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
--์ ๋ ฅ ํ์ผ ํ์ผ ์ด๋ฆ
ํ์ธํ ํ์ผ(๊ธฐ๋ณธ๊ฐ์ stdin)์ ๋๋ค.
--์๊ฒฉํ ๊ณต๋ฐฑ
๊ธฐ๋ณธ์ ์ผ๋ก FileCheck๋ ์ ๋ ฅ ์ํ ๊ณต๋ฐฑ(๊ณต๋ฐฑ ๋ฐ ํญ)์ ์ ๊ทํํฉ๋๋ค.
์ด๋ ์ด๋ฌํ ์ฐจ์ด์ ์ ๋ฌด์ํ๋๋ก ํฉ๋๋ค(๊ณต๋ฐฑ์ ํญ๊ณผ ์ผ์นํจ). NS
--์๊ฒฉํ ๊ณต๋ฐฑ ์ธ์๋ ์ด ๋์์ ๋นํ์ฑํํฉ๋๋ค. ์ค ๋ ์ํ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
UNIX ์คํ์ผ๋ก ์ ๊ทํ \n ๋ชจ๋ ๋ชจ๋์์.
--์์์ ํ์ธ ์ ํจ ์ฒดํฌ ํจํด
๊ธ์ ๊ฒ์ฌ ์ฌ์ด์ ์ง์ ๋ ํจํด์ ๋ํ ์์์ ๋ถ์ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋ค์์ผ๋ก ์ฑ์ฐ์ง ์๊ณ ๋ ์๊ฒฉํ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ฒดํฌํ์ง ์์s.
์๋ฅผ ๋ค์ด, "--์์์ ํ์ธ ์ ํจ ๊ฒฝ๊ณ :" ์ง๋จ์ ํ ์คํธํ ๋ ์ ์ฉํ ์ ์์ต๋๋ค.
์ ์ ์ฌํ ์ต์ ์ด ์๋ ๋๊ตฌ์ ๋ฉ์์ง ๊ทธ ์๋ฆฌ -๊ฒ์ฆ. ์ด๊ฒ์ผ๋ก
์ต์ FileCheck๋ ์ ๋ ฅ์ ํฌํจ๋์ง ์์ ๊ฒฝ๊ณ ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
์ด๋ค ๊ฒ์ฌ: ํจํด.
-๋ฒ์ญ
์ด ํ๋ก๊ทธ๋จ์ ๋ฒ์ ๋ฒํธ๋ฅผ ํ์ํฉ๋๋ค.
EXIT ์ง์
If ํ์ผ ๊ฒ์ฌ ํ์ผ์ด ์์ ๋ด์ฉ๊ณผ ์ผ์นํ๋์ง ํ์ธํ๊ณ 0์ผ๋ก ์ข ๋ฃํฉ๋๋ค.
๊ทธ๋ ์ง ์๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด XNUMX์ด ์๋ ๊ฐ์ผ๋ก ์ข ๋ฃ๋ฉ๋๋ค.
์ด์ฉ ๊ฐ์ด๋
FileCheck๋ ์ผ๋ฐ์ ์ผ๋ก LLVM ํ๊ท ํ ์คํธ์์ ์ฌ์ฉ๋๋ฉฐ RUN ๋ผ์ธ์์ ํธ์ถ๋ฉ๋๋ค.
์ํ. RUN ๋ผ์ธ์์ FileCheck๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
; ์คํ: llvm-as < %s | LLC -86์=x64-XNUMX | ํ์ผ ๊ฒ์ฌ %s
์ด ๊ตฌ๋ฌธ์ ํ์ฌ ํ์ผ("%s") ์์ผ๋ก llvm-as, ํ์ดํ LLC๋ค์,
ํ์ดํ์ ์ถ๋ ฅ LLC ์ผ๋ก ํ์ผ ๊ฒ์ฌ. ์ด๋ FileCheck๊ฐ
์ง์ ๋ ํ์ผ ์ด๋ฆ ์ธ์์ ๋ํ ํ์ค ์ ๋ ฅ(llc ์ถ๋ ฅ)(์๋ณธ .NS
"๋ก ์ง์ ๋ ํ์ผ%s"). ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด๋ ค๋ฉด ๋๋จธ์ง .NS ํ์ผ
(RUN ๋ผ์ธ ์ดํ):
์ ์ ๋ฌดํจ @sub1(i32* %p, i32 %v) {
๊ธฐ์ :
; ํ์ธ: ํ์ 1:
; ํ์ธ: ์๋ธ
%0 = ๊ผฌ๋ฆฌ ํธ์ถ i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
๋ฌดํจ
}
์ ์ ๋ฌดํจ @inc4(i64* %p) {
๊ธฐ์ :
; ํ์ธ: Inc4:
; ํ์ธ: Incq
%0 = ๊ผฌ๋ฆฌ ํธ์ถ i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
๋ฌดํจ
}
์ฌ๊ธฐ์์ ์ผ๋ถ "๋ฅผ ๋ณผ ์ ์์ต๋๋ค.๊ฒ์ฌ:" ๋ผ์ธ์ด ์ฃผ์์ผ๋ก ์ง์ ๋์์ต๋๋ค. ์ด์ ํ์ผ์ด ์ด๋ป๊ฒ
๋ก ํ์ดํ๋๋ค llvm-as๋ค์, LLC, ๊ทธ๋ฆฌ๊ณ ๊ธฐ๊ณ์ด ์ฝ๋ ์ถ๋ ฅ์ ์ฐ๋ฆฌ๊ฐ ํ์ธํ๋ ๊ฒ์ ๋๋ค.
FileCheck๋ ๊ธฐ๊ณ ์ฝ๋ ์ถ๋ ฅ์ ๊ฒ์ฌํ์ฌ "๊ฒ์ฌ:" ๋ผ์ธ
์ง์ ํฉ๋๋ค.
"์ ๊ตฌ๋ฌธ๊ฒ์ฌ:" ์ค์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
์ฃผ๋ฌธํ๋ค. FileCheck๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ๋ก ๊ณต๋ฐฑ ์ฐจ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค(์: ๊ณต๋ฐฑ์
ํญ๊ณผ ์ผ์นํ๋๋ก ํ์ฉ๋จ). ๊ทธ๋ ์ง ์์ผ๋ฉด "๊ฒ์ฌ:" ๋ผ์ธ์ ํ์
ํ ์คํธ ํ์ผ์ ์ด๋ค ๊ฒ์ ์ ํํ ์ผ์น์ํต๋๋ค.
FileCheck(grep๊ณผ ๋น๊ตํ์ฌ)์ ๋ํ ํ ๊ฐ์ง ์ข์ ์ ์ ํ ์คํธ ์ฌ๋ก๋ฅผ ๋ณํฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
ํจ๊ป ๋ ผ๋ฆฌ ๊ทธ๋ฃน์ผ๋ก. ์๋ฅผ ๋ค์ด ์์ ํ ์คํธ๋
"ํ์ 1:"์"Inc4:" ๋ผ๋ฒจ์ด ์์ผ๋ฉด ์ผ์นํ์ง ์์ต๋๋ค "์๋ธ"๊ทธ ์ฌ์ด์
๋ ์ด๋ธ. ํ์ผ์ ๋ค๋ฅธ ์์น์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ณ์ฐ๋์ง ์์ต๋๋ค. "GREP ์๋ธ"
"์ด๋ฉด ์ผ์น์๋ธ"๋ ํ์ผ์ ์๋ฌด ๊ณณ์๋ ์กด์ฌํฉ๋๋ค.
XNUMXD๋ดํ์ ํ์ผ ๊ฒ์ฌ -์ฒดํฌ ์ ๋์ฌ ์ ํ๊ถ
ํ์ผ์ฒดํฌ -์ฒดํฌ ์ ๋์ฌ ์ต์ ์ ํตํด ์ฌ๋ฌ ํ ์คํธ ๊ตฌ์ฑ์ ๊ตฌ๋ํ ์ ์์ต๋๋ค.
ํ .NS ํ์ผ. ์ด๊ฒ์ ์ฌ๋ฌ ์ํฉ์์ ์ ์ฉํฉ๋๋ค(์: ๋ค๋ฅธ ํ ์คํธ
์ํคํ ์ฒ ๋ณํ LLC. ๋ค์์ ๊ฐ๋จํ ์์ ๋๋ค.
; ์คํ: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
; ์คํ: | ํ์ผ ๊ฒ์ฌ %s -๊ฒ์ฌ ์ ๋์ฌ=X32
; ์คํ: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
; ์คํ: | ํ์ผ ๊ฒ์ฌ %s -๊ฒ์ฌ ์ ๋์ฌ=X64
์ ์ <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
%tmp1 = ์ฝ์ ์์ <4 x i32>; %tmp, i32 %s, i32 1
ret <4 x i32> %tmp1
; X32: pinrd_1:
; X32: ํ ๋ฒํธ $1, 4(%esp), %xmm0
; X64: pinrd_1:
; X64: ํ ๋ฒํธ $1, %edi, %xmm0
}
์ด ๊ฒฝ์ฐ 32๋นํธ ๋ฐ
64๋นํธ ์ฝ๋ ์์ฑ.
XNUMXD๋ดํ์ ํ์ธ-๋ค์: ์ง๋ น
๋๋ก๋ ๋ผ์ธ์ ์ผ์น์ํค๊ณ ์ผ์น๊ฐ ์ ํํ
๊ทธ ์ฌ์ด์ ๋ค๋ฅธ ์ค์ด ์๋ ์ฐ์๋ ์ค. ์ด ๊ฒฝ์ฐ "๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.๊ฒ์ฌ:"
์ "ํ์ธ-๋ค์:" ์ง์๋ฌธ์ ์ง์ ํฉ๋๋ค. ์ฌ์ฉ์ ์ง์ ๊ฒ์ฌ ์ ๋์ฌ๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ
๊ทธ๋ฅ ์ฌ์ฉ "-๋ค์:". ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์์ํ ๋๋ก ์๋ํฉ๋๋ค.
์ ์ ๋ฌดํจ @t2(<2 x ๋๋ธ>* %r, <2 x ๋๋ธ>* %A, ๋๋ธ %B) {
%tmp3 = ๋ก๋ <2 x ๋๋ธ>* %A, 16 ์ ๋ ฌ
%tmp7 = ์ฝ์ ์์ <2 x ์ด์ค> undef, ์ด์ค %B, i32 0
%tmp9 = ์ ํ ๋ฒกํฐ <2 x ๋๋ธ> %tmp3,
<2 x ๋๋ธ> %tmp7,
<2 x i32> < i32 0, i32 2 >
์ ์ฅ <2 x ์ด์ค> %tmp9, <2 x ์ด์ค>* %r, ์ ๋ ฌ 16
๋ฌดํจ
; ํ์ธ: t2:
; ํ์ธ: movl 8(%esp), %eax
; ๋ค์ ํ์ธ: movapd(%eax), %xmm0
; ๋ค์ ํ์ธ: movhpd 12(%esp), %xmm0
; ๋ค์ ํ์ธ: movl 4(%esp), %eax
; ๋ค์ ํ์ธ: movapd %xmm0, (%eax)
; CHECK-NEXT: ๋ค์
}
"ํ์ธ-๋ค์:" ์ง์๋ฌธ ์ฌ์ด์ ์ ํํ ํ๋์ ๊ฐํ ๋ฌธ์๊ฐ ์์ผ๋ฉด ์ ๋ ฅ์ ๊ฑฐ๋ถํฉ๋๋ค.
๋ฐ ์ด์ ์ง์๋ฌธ. NS "ํ์ธ-๋ค์:"๋ ํ์ผ์ ์ฒซ ๋ฒ์งธ ์ง์๋ฌธ์ผ ์ ์์ต๋๋ค.
XNUMXD๋ดํ์ ์ฒดํฌํ์ง ์์: ์ง๋ น
"์ฒดํฌํ์ง ์์:" ์ง์๋ฌธ์ ๋ ๋ฌธ์์ด ์ฌ์ด์ ๋ฌธ์์ด์ด ๋ฐ์ํ์ง ์๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ผ์น(๋๋ ์ฒซ ๋ฒ์งธ ์ผ์น ์ ๋๋ ๋ง์ง๋ง ์ผ์น ํ). ์๋ฅผ ๋ค์ด ๋ค์์ ํ์ธํ๋ ค๋ฉด
๋ณํ์ ์ํด ๋ถํ๊ฐ ์ ๊ฑฐ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ ์คํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ i8 @coerce_offset0(i32 %V, i32* %P) {
i32 %V, i32* %P ์ ์ฅ
%P2 = ๋นํธ์บ์คํธ i32* %P์์ i8*๋ก
%P3 = getelementptr i8* %P2, i32 2
%A = ๋ก๋ i8* %P3
i8%A๋ฅผ ๋ค์ ์ค์ ํ์ธ์
; ํ์ธ: @coerce_offset0
; ์ฒดํฌํ์ง ์์: ๋ก๋
; ํ์ธ: ret i8
}
XNUMXD๋ดํ์ ์ฒดํฌ-DAG: ์ง๋ น
์๊ฒฉํ๊ฒ ์์ฐจ์ ์ผ๋ก ๋ฐ์ํ์ง ์๋ ๋ฌธ์์ด์ ์ผ์น์์ผ์ผ ํ๋ ๊ฒฝ์ฐ,
"์ฒดํฌ-DAG:" ๋ ๊ฒฝ๊ธฐ ์ฌ์ด(๋๋ ์ฒซ ๋ฒ์งธ ๊ฒฝ๊ธฐ ์ ,
๋๋ ๋ง์ง๋ง ๊ฒฝ๊ธฐ ํ). ์๋ฅผ ๋ค์ด, clang์ vtable ์ ์ญ์ ์ญ์์ผ๋ก ๋ด๋ณด๋ ๋๋ค. ์ฌ์ฉ
์ฒดํฌ-DAG:, ์ํ๋ฅผ ์์ฐ์ค๋ฌ์ด ์์๋ก ์ ์งํ ์ ์์ต๋๋ค.
// ์คํ: %clang_cc1 %s -emit-llvm -o - | ํ์ผ ๊ฒ์ฌ %s
struct Foo { ๊ฐ์ ๋ฌดํจ ๋ฉ์๋(); };
ํธ ์ํ; // vtable์ ๋ด๋ณด๋ ๋๋ค.
// ํ์ธ-DAG: @_ZTV3Foo =
struct Bar { ๊ฐ์ ๋ฌดํจ ๋ฉ์๋(); };
๋ฐ b;
// ์ฒดํฌ-DAG: @_ZTV3Bar =
์ฒดํฌํ์ง ์์: ์ง์๋ฌธ์ ๋ค์๊ณผ ํผํฉ๋ ์ ์์ต๋๋ค. ์ฒดํฌ-DAG: ์ฌ์ด์ ๋ฌธ์์ด์ ์ ์ธํ๋ ์ง์๋ฌธ
์ฃผ๋ณ ์ฒดํฌ-DAG: ์ง์. ๊ทธ ๊ฒฐ๊ณผ ์ฃผ๋ณ ์ฒดํฌ-DAG: ๏ฟฝ๏ฟฝฤง
์ฌ์ ๋ ฌํ ์ ์์ต๋๋ค. ์ฆ, ๋ชจ๋ ํญ๋ชฉ์ด ์ผ์นํฉ๋๋ค. ์ฒดํฌ-DAG: ์ ์ ์ฒดํฌํ์ง ์์: ํ์ง ์์์ผ
๋ค์ฒ์ง๋ ๋ฐ์ ์ผ์น ์ฒดํฌ-DAG: ์๊ฐ ๋ด์ ์ฒดํฌํ์ง ์์:. ์๋ฅผ ๋ค์ด,
; ์ฒดํฌ-๋๊ทธ: ์ด์
; ์ฒดํฌํ์ง ์์: ์๋
; CHECK-DAG: ์ดํ
์ด ๊ฒฝ์ฐ๋ ์ ๋ ฅ ๋ฌธ์์ด์ ๊ฑฐ๋ถํฉ๋๋ค. ์ ์ ์ดํ์ ๋ฐ์ ํ ํ์.
์บก์ฒ๋ ๋ณ์๋ก, ์ฒดํฌ-DAG: DAG์ ์ ํจํ ํ ํด๋ก์ง ์์์ ์ผ์นํ ์ ์์ต๋๋ค.
๋ณ์์ ์ ์์์ ์ฌ์ฉ๊น์ง์ ๊ฐ์ฅ์๋ฆฌ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
ํ ์คํธ ์ผ์ด์ค๋ ๋ช ๋ น์ด ์ค์ผ์ค๋ฌ์ ๋ค๋ฅธ ์ถ๋ ฅ ์ํ์ค์ ์ผ์นํด์ผ ํฉ๋๋ค. ์์ํ
์,
; CHECK-DAG: [[REG1:r[0-9]+]], r1, r2 ์ถ๊ฐ
; CHECK-DAG: [[REG2:r[0-9]+]], r3, r4 ์ถ๊ฐ
; ํ์ธ: mul r5, [[REG1]], [[REG2]]
์ด ๊ฒฝ์ฐ, ๊ทธ ๋ ์ค ์ด๋ค ์์๋ผ๋ ๋ํ๋ค ์ง์๊ฐ ํ์ฉ๋ฉ๋๋ค.
์ ์ํ๋ ๊ฒฝ์ฐ ๊ณผ ๊ฐ์ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฒดํฌ-DAG: ์ฐจ๋จ
์ ์ ๊ท์น์ด ์ผ์นํ ์ ์์ ์๊ฐ ๋ด์ ๊ทธ๊ฒ์ ์ฌ์ฉ.
๋ฐ๋ผ์ ์๋ฅผ ๋ค์ด ์๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฌ๋ฉ๋๋ค.
; ํ์ธ-DAG: vmov.32 [[REG2:d[0-9]+]][0]
; ํ์ธ-DAG: vmov.32 [[REG2]][1]
vmov.32 d0[1]
vmov.32 d0[0]
์ด ๋ค๋ฅธ ์ฝ๋๋ ๋ค์์ ์ํํ์ง ์์ต๋๋ค.
; ํ์ธ-DAG: vmov.32 [[REG2:d[0-9]+]][0]
; ํ์ธ-DAG: vmov.32 [[REG2]][1]
vmov.32 d1[1]
vmov.32 d0[0]
์ด๊ฒ์ ๋งค์ฐ ์ ์ฉํ ์ ์์ง๋ง ๋ํ ์ํํฉ๋๋ค.
์์๊ฐ ํ์คํด์ผ ํฉ๋๋ค(์ฐ๊ธฐ ์ ์ ์ฝ๊ธฐ, ์ฌ์ฉํ๊ธฐ ์ ์ ๋ณต์ฌ ๋ฑ). ๋ง์ฝ
ํ ์คํธ๊ฐ ์ฐพ๊ณ ์๋ ์ ์๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ(์ปดํ์ผ๋ฌ์ ๋ฒ๊ทธ๋ก ์ธํด)
์ฌ์ฉ์์ ๋ ๋ฉ๋ฆฌ ์ผ์นํ ์ ์์ผ๋ฉฐ ์ค์ ๋ฒ๊ทธ๋ฅผ ๋ฉ๋ฆฌ ์จ๊ธธ ์ ์์ต๋๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ ์์๋ฅผ ์ ์ฉํ๋ ค๋ฉด DAG ๋ธ๋ก ์ฌ์ด์ ๋น DAG ์ง์๋ฌธ์ ์ฌ์ฉํ์ญ์์ค.
XNUMXD๋ดํ์ ์ฒดํฌ ๋ผ๋ฒจ: ์ง๋ น
๋๋ก๋ ๋ ผ๋ฆฌ์ ๋ธ๋ก์ผ๋ก ๋ถํ ๋ ์ฌ๋ฌ ํ ์คํธ๋ฅผ ํฌํจํ๋ ํ์ผ์์ ํ๋ ์ด์์
๊ฒ์ฌ: ์ง์๋ฌธ์ ์ดํ ๋ธ๋ก์ ํ์ ์ผ์น์์ผ ์ค์๋ก ์ฑ๊ณตํ ์ ์์ต๋๋ค. ๋์
์ค๋ฅ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฒฐ๊ตญ ์์ฑ๋์ง๋ง ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ํ๋๊ทธ๊ฐ ์ง์ ๋ ๊ฒ์ฌ๋ ๊ทธ๋ ์ง ์์ ์ ์์ต๋๋ค.
์ค์ ๋ก ๋ฌธ์ ์ ์ค์ ์์ธ๊ณผ ๊ด๊ณ๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ ๋ ๋์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด "์ฒดํฌ ๋ผ๋ฒจ:" ์ง์๋ฌธ์
์ฌ์ฉ๋๋ค. ์ผ๋ฐ๊ณผ ๋์ผํ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค CHECK FileCheck๊ฐ ๋ง๋๋ ๊ฒ์ ์ ์ธํ๊ณ ์ง์๋ฌธ
์ง์๋ฌธ๊ณผ ์ผ์นํ๋ ํ๋ ๋ค์์ ์ํด ์ผ์น๋ ์ ์๋ค๋ ์ถ๊ฐ ๊ฐ์
๋ค๋ฅธ ๋ชจ๋ ์ํ ์ผ์น ํ์ผ ์ด๋ฆ; ์ด๊ฒ์ ๋ผ์ธ์ ์ฌ์ฉํ๊ธฐ์ํ ๊ฒ์ ๋๋ค
๋ ์ด๋ธ ๋๋ ๊ธฐํ ๊ณ ์ ์๋ณ์๋ฅผ ํฌํจํฉ๋๋ค. ๊ฐ๋ ์ ์ผ๋ก ์กด์ฌ ์ฒดํฌ ๋ผ๋ฒจ
์ ๋ ฅ ์คํธ๋ฆผ์ ๊ฐ๋ณ ๋ธ๋ก์ผ๋ก ๋๋๊ณ ๊ฐ ๋ธ๋ก์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋ฐฉ์ง ๊ฒ์ฌ: ํ ๋ธ๋ก์ ์ง์๋ฌธ์ด ๋ค๋ฅธ ๋ธ๋ก์ ํ๊ณผ ์ผ์นํฉ๋๋ค. ์๋ฅผ ๋ค์ด,
์ ์ %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
๊ธฐ์ :
; ํ์ธ ๋ผ๋ฒจ: C_ctor_base:
; ํ์ธ: mov [[SAVETHIS:r[0-9]+]], r0
; ํ์ธ: bl A_ctor_base
; ํ์ธ: mov r0, [[์ ์ฅ]]
%0 = ๋นํธ์บ์คํธ %struct.C* %์ด๋ฅผ %struct.A*๋ก
%call = ๊ผฌ๋ฆฌ ํธ์ถ %struct.A* @A_ctor_base(%struct.A* %0)
%1 = ๋นํธ์บ์คํธ %struct.C* %์ด๋ฅผ %struct.B*๋ก
%call2 = ๊ผฌ๋ฆฌ ํธ์ถ %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
ret %struct.C* % this
}
์ ์ %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
๊ธฐ์ :
; ํ์ธ ๋ผ๋ฒจ: D_ctor_base:
์ฌ์ฉ ์ฒดํฌ ๋ผ๋ฒจ: ์ด ๊ฒฝ์ฐ ์ง์๋ฌธ์ ์ธ ๊ฐ์ง ๊ฒ์ฌ: ๏ฟฝ๏ฟฝฤง
๋ณธ๋ฌธ์ ํด๋นํ๋ ์ค๋ง ํ์ฉ @C_ctor_base ๊ธฐ๋ฅ์ ์ํํ๋๋ผ๋
ํจํด์ ํ์ผ์ ๋ท๋ถ๋ถ์์ ์ฐพ์ ์ผ์น ๋ผ์ธ์ ๋๋ค. ๋ํ ์ด XNUMX๊ฐ์ง ์ค ํ๋๋ผ๋ ๊ฒ์ฌ:
์ง์๋ฌธ์ด ์คํจํ๋ฉด FileCheck๋ ๋ค์ ๋ธ๋ก์ ๊ณ์ํ์ฌ ๋ณต๊ตฌํ์ฌ ์ฌ๋ฌ
๋จ์ผ ํธ์ถ์์ ๊ฐ์งํ ํ ์คํธ ์คํจ.
์๊ตฌ ์ฌํญ์ ์์ต๋๋ค. ์ฒดํฌ ๋ผ๋ฒจ: ์ง์๋ฌธ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์์ด์ด ํฌํจ๋ฉ๋๋ค.
์์ค ๋๋ ์ถ๋ ฅ ์ธ์ด์ ์ค์ ๊ตฌ๋ฌธ ๋ ์ด๋ธ: ๋จ์ํ ๊ณ ์ ํ๊ฒ ์ผ์นํด์ผ ํฉ๋๋ค.
ํ์ธ ์ค์ธ ํ์ผ์ ํ ์ค.
์ฒดํฌ ๋ผ๋ฒจ: ์ง์๋ฌธ์ ๋ณ์ ์ ์ ๋๋ ์ฌ์ฉ์ ํฌํจํ ์ ์์ต๋๋ค.
ํ์ผ ๊ฒ์ฌ ๋ฌด๋ฌ ๋งค์นญ ํต์ฌ๋ก
"๊ฒ์ฌ:"์"์ฒดํฌํ์ง ์์:" ์ง์๋ฌธ์ ๋ชจ๋ ์ผ์นํ๋ ํจํด์ ์ทจํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ
FileCheck, ๊ณ ์ ๋ฌธ์์ด ๋งค์นญ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋
์ ์ฐํ ํํ์ ๋งค์นญ์ด ํ์ํฉ๋๋ค. ์ด๋ฅผ ์ง์ํ๊ธฐ ์ํด FileCheck๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ง์ ํ ์ ์์ต๋๋ค.
์ด์ค ์ค๊ดํธ๋ก ๋ฌถ์ธ ์ผ์นํ๋ ๋ฌธ์์ด์ ์ ๊ท์: {{yourregex}}.
์ฐ๋ฆฌ๊ฐ ํ๋ ๋๋ถ๋ถ์ ์์ ์ ๊ณ ์ ๋ฌธ์์ด ์ผ์น๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ FileCheck๋
์ผ๋ฐ ๋ฌธ์์ด๊ณผ ์ผ์นํ๋ ๊ณ ์ ๋ฌธ์์ด์ ํผํฉ ๋ฐ ์ผ์น๋ฅผ ์ง์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
ํํ. ์ด๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
; ํ์ธ: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}
์ด ๊ฒฝ์ฐ ESP ๋ ์ง์คํฐ์ ์คํ์ ์ด ํ์ฉ๋๊ณ ๋ชจ๋ xmm ๋ ์ง์คํฐ๋
ํ์ฉ๋ฉ๋๋ค.
์ ๊ท์์ ์ด์ค ์ค๊ดํธ๋ก ๋ฌถ์ฌ ์๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ณ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ C์์์ฒ๋ผ ์ด์ค ์ค๊ดํธ ์์ ์ด์ค์ผ์ดํ ๋ฌธ์๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
์ ๋ ฅ์์ ๋ช ์์ ์ผ๋ก ์ด์ค ์ค๊ดํธ๋ฅผ ์ผ์น์ํค๋ ค๋ ๋๋ฌธ ๊ฒฝ์ฐ์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ถ์ ํ ๊ฒ์ ์ฌ์ฉ {{[{][{]}} ๋น์ ์ ํจํด์ผ๋ก.
ํ์ผ ๊ฒ์ฌ ๋ณ์
ํจํด์ ์ผ์น์ํจ ๋ค์ ๋์ค์ ๋ค์ ๋ฐ์ํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข ์ข ์ ์ฉํฉ๋๋ค.
ํ์ผ. codegen ํ ์คํธ์ ๊ฒฝ์ฐ ์ด๊ฒ์ ๋ชจ๋ ๋ ์ง์คํฐ๋ฅผ ํ์ฉํ๋ ๋ฐ ์ ์ฉํ ์ ์์ง๋ง ๋ค์์ ํ์ธํ์ญ์์ค.
๋ ์ง์คํฐ๋ ๋์ค์ ์ผ๊ด๋๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ํ๊ธฐ ์ํด, ํ์ผ ๊ฒ์ฌ ๋ช ๋ช ๋ ๋ณ์๋ฅผ ํ์ฉ
์ ์๋๊ณ ํจํด์ผ๋ก ๋์ฒด๋ฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ์์ ๋๋ค.
; ํ์ธ: ํ ์คํธ5:
; ํ์ธ: ์ง๊ธ [[๋ฑ๋ก:%[az]+]]
; ํ์ธ: andw {{.*}}[[๋ฑ๋ก]]
์ฒซ ๋ฒ์งธ ์ฒดํฌ ๋ผ์ธ์ ์ ๊ท์๊ณผ ์ผ์นํฉ๋๋ค. %[์์ฆ]+ ๋ณ์์ ์บก์ฒ ๋ฐ์ด๋ธ์ค(BINANCE) ๊ฐ์ ํ๊ธฐ.
๋ ๋ฒ์งธ ์ค์ ๋ค์ ํญ๋ชฉ์ด ๋ฌด์์ธ์ง ํ์ธํฉ๋๋ค. ๋ฐ์ด๋ธ์ค(BINANCE) ๊ฐ์ ํ๊ธฐ ์ดํ์ ํ์ผ์์ ๋ฐ์
"๊ทธ๋ฆฌ๊ณ ". ํ์ผ ๊ฒ์ฌ ๋ณ์ ์ฐธ์กฐ๋ ํญ์ [[ ]] ์, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์
์ด๋ฆ์ ์ ๊ท์์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. [a-zA-Z][a-zA-Z0-9]*. ์ฝ๋ก ์ด ์ด๋ฆ ๋ค์ ์ค๋ ๊ฒฝ์ฐ,
๊ทธ๋ฐ ๋ค์ ๋ณ์์ ์ ์์ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ์ฉ์ ๋๋ค.
ํ์ผ ๊ฒ์ฌ ๋ณ์๋ ์ฌ๋ฌ ๋ฒ ์ ์ํ ์ ์์ผ๋ฉฐ ํญ์ ์ต์ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๋ณ์๋ ๋์ค์ ์ ์๋ ๋์ผํ ๋ผ์ธ์์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
; ํ์ธ: op [[REG:r[0-9]+]], [[REG]]
ํผ์ฐ์ฐ์๋ฅผ ์ํ ๊ฒฝ์ฐ ์ ์ฉํ ์ ์์ต๋๋ค. op ๋์ผํ ๋ ์ง์คํฐ๊ฐ ๋๋ฉฐ ์๊ดํ์ง ์์ต๋๋ค.
์ ํํ ์ด๋ค ๋ ์ง์คํฐ์ธ์ง.
ํ์ผ ๊ฒ์ฌ ์
๋๋ก๋ ์ผ์น ํ์ผ์ ์ค ๋ฒํธ๋ฅผ ์ฐธ์กฐํ๋ ์ถ๋ ฅ์ ํ์ธํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ปดํ์ผ๋ฌ ์ง๋จ์ ํ ์คํธํ ๋. ์ด๊ฒ์ ๊ฒฝ๊ธฐ์ ํน์ ์ทจ์ฝ์ฑ์ ์๊ฐํฉ๋๋ค.
ํ์ผ ๊ตฌ์กฐ, "๊ฒ์ฌ:" ์ค์๋ ๋์ผํ ํ์ผ์ ์ ๋ ์ค ๋ฒํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
ํ ์คํธ ์ถ๊ฐ ๋๋ ์ญ์ ๋ก ์ธํด ์ค ๋ฒํธ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ๋ฅผ ์ง์ํ๊ธฐ ์ํด FileCheck๋ [[@์ ]], [[@LINE+ ]],
[[@์ - ]] ํจํด์ ํํ. ์ด๋ฌํ ํํ์ ๋ค์๊ณผ ๊ฐ์ด ํ์ฅ๋ฉ๋๋ค.
ํจํด์ด ์๋ ๋ผ์ธ(์ ํ์ ์ธ ์ ์ ์คํ์ ํฌํจ).
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ผ์น ํจํด์ ๊ด๋ จ ํ ์คํธ ๋ผ์ธ ๊ทผ์ฒ์ ๋ฐฐ์นํ๊ณ ์๋ ๋ผ์ธ์ ํฌํจํ ์ ์์ต๋๋ค.
๋ฒํธ ์ฐธ์กฐ, ์:
// ํ์ธ: test.cpp:[[@LINE+4]]:6: ์ค๋ฅ: ์์ ';' ์ต์์ ์ ์ธ์ ์ดํ
// ํ์ธ-๋ค์: {{^int a}}
// ํ์ธ-๋ค์: {{^ \^}}
// ๋ค์ ํ์ธ: {{^ ;}}
์ ์
onworks.net ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์จ๋ผ์ธ์ผ๋ก FileCheck-3.6 ์ฌ์ฉ