ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

Ad


OnWorks favicon

FileCheck-3.6 - ອອນລາຍໃນຄລາວ

ແລ່ນ FileCheck-3.6 ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ FileCheck-3.6 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


FileCheck - ຕົວກວດສອບໄຟລ໌ທີ່ກົງກັບຮູບແບບທີ່ມີຄວາມຍືດຫຍຸ່ນ

ສະຫຼຸບສັງລວມ


FileCheck ຊື່ໄຟລ໌ທີ່ກົງກັນ [--check-prefix=XXX] [--strict-whitespace]

ລາຍລະອຽດ


FileCheck ອ່ານສອງໄຟລ໌ (ຫນຶ່ງຈາກວັດສະດຸປ້ອນມາດຕະຖານ, ແລະຫນຶ່ງທີ່ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ)
ແລະໃຊ້ອັນໜຶ່ງເພື່ອຢັ້ງຢືນອີກອັນໜຶ່ງ. ພຶດຕິກໍານີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະສໍາລັບ testsuite,
ທີ່​ຕ້ອງ​ການ​ເພື່ອ​ກວດ​ສອບ​ວ່າ​ຜົນ​ຜະ​ລິດ​ຂອງ​ເຄື່ອງ​ມື​ບາງ (eg llc) ປະ​ກອບ​ດ້ວຍ​ຄາດ​ຄະ​ເນ​
ຂໍ້ມູນ (ຕົວຢ່າງ, movsd ຈາກ esp ຫຼືສິ່ງທີ່ຫນ້າສົນໃຈ). ນີ້ແມ່ນຄ້າຍຄືກັນ
ການນໍາໃຊ້ grep, ແຕ່ມັນຖືກປັບປຸງໃຫ້ເຫມາະສົມກັບການຈັບຄູ່ວັດສະດຸປ້ອນທີ່ແຕກຕ່າງກັນຫຼາຍຢູ່ໃນໄຟລ໌ດຽວໃນ a
ຄໍາສັ່ງສະເພາະ.

ໄດ້ ຊື່ໄຟລ໌ທີ່ກົງກັນ ໄຟລ໌ກໍານົດໄຟລ໌ທີ່ມີຮູບແບບທີ່ຈະກົງກັນ. ໄຟລ໌
ເພື່ອກວດສອບແມ່ນອ່ານຈາກວັດສະດຸປ້ອນມາດຕະຖານເວັ້ນເສຍແຕ່ວ່າ --input-file ທາງເລືອກແມ່ນຖືກນໍາໃຊ້.

OPTIONS


-ຊ່ວຍ ພິມບົດສະຫຼຸບຂອງຕົວເລືອກແຖວຄໍາສັ່ງ.

--check-prefix ຄຳ ນຳ ໜ້າ
FileCheck ຄົ້ນຫາເນື້ອໃນຂອງ ຊື່ໄຟລ໌ທີ່ກົງກັນ ສໍາລັບຮູບແບບທີ່ກົງກັນ. ໂດຍ
ຄ່າເລີ່ມຕົ້ນ, ຮູບແບບເຫຼົ່ານີ້ຖືກນຳໜ້າດ້ວຍ "ກວດເບິ່ງ:". ຖ້າທ່ານຕ້ອງການໃຊ້ a
ຄໍານໍາຫນ້າທີ່ແຕກຕ່າງກັນ (e. g. ເນື່ອງຈາກວ່າໄຟລ໌ປ້ອນຂໍ້ມູນດຽວກັນແມ່ນການກວດສອບຫຼາຍທີ່ແຕກຕ່າງກັນ
ເຄື່ອງມືຫຼືທາງເລືອກ), ໄດ້ --check-prefix ການໂຕ້ຖຽງອະນຸຍາດໃຫ້ທ່ານລະບຸຫນຶ່ງຫຼືຫຼາຍກວ່ານັ້ນ
ຄໍານໍາຫນ້າເພື່ອໃຫ້ກົງກັນ. ຄໍານໍາຫນ້າຫຼາຍແມ່ນເປັນປະໂຫຍດສໍາລັບການທົດສອບທີ່ອາດຈະມີການປ່ຽນແປງສໍາລັບ
ທາງເລືອກການແລ່ນທີ່ແຕກຕ່າງກັນ, ແຕ່ສາຍສ່ວນໃຫຍ່ຍັງຄົງຄືກັນ.

--input-file ຊື່​ເອ​ກະ​ສານ
ໄຟລ໌ທີ່ຈະກວດສອບ (ຄ່າເລີ່ມຕົ້ນຂອງ stdin).

--strict-whitespace
ໂດຍຄ່າເລີ່ມຕົ້ນ, FileCheck canonicalizes input input whitespace (spaces and tabs)
ເຊິ່ງເຮັດໃຫ້ມັນບໍ່ສົນໃຈຄວາມແຕກຕ່າງເຫຼົ່ານີ້ (ຊ່ອງຫວ່າງຈະກົງກັບແຖບ). ໄດ້
--strict-whitespace argument ປິດການປະພຶດນີ້. ລໍາດັບທ້າຍຂອງເສັ້ນແມ່ນ
canonicalized ກັບ UNIX ແບບ \n ໃນ​ທຸກ​ຮູບ​ແບບ​.

--implicit-check-not ການ​ກວດ​ກາ​ຮູບ​ແບບ​
ເພີ່ມການກວດສອບທາງລົບ implicit ສໍາລັບຮູບແບບທີ່ກໍານົດໄວ້ລະຫວ່າງການກວດສອບໃນທາງບວກ.
ທາງ​ເລືອກ​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ຂຽນ​ການ​ທົດ​ສອບ​ເຂັ້ມ​ງວດ​ໂດຍ​ບໍ່​ມີ​ການ stuffing ໃຫ້​ເຂົາ​ເຈົ້າ​ດ້ວຍ ກວດເບິ່ງ-ບໍ່s.

ຍົກ​ຕົວ​ຢ່າງ, "--implicit-check-not ຄຳ ເຕືອນ:"ສາມາດເປັນປະໂຫຍດໃນເວລາທົດສອບການວິນິດໄສ
ຂໍ້ຄວາມຈາກເຄື່ອງມືທີ່ບໍ່ມີທາງເລືອກທີ່ຄ້າຍຄືກັນກັບ ຄາງ - ກວດ​ສອບ​. ດ້ວຍນີ້
ທາງ​ເລືອກ FileCheck ຈະ​ກວດ​ສອບ​ວ່າ​ການ​ປ້ອນ​ຂໍ້​ມູນ​ບໍ່​ມີ​ຄໍາ​ເຕືອນ​ທີ່​ບໍ່​ໄດ້​ກວມ​ເອົາ​ໂດຍ​
ໃດ ກວດເບິ່ງ: ຮູບແບບ.

-ການປ່ຽນແປງ
ສະ​ແດງ​ຕົວ​ເລກ​ສະ​ບັບ​ຂອງ​ໂຄງ​ການ​ນີ້​.

ອອກ STATUS


If FileCheck ກວດ​ສອບ​ວ່າ​ໄຟລ​໌​ກົງ​ກັບ​ເນື້ອ​ໃນ​ທີ່​ຄາດ​ວ່າ​ຈະ​, ມັນ​ອອກ​ດ້ວຍ 0​.
ຖ້າບໍ່ດັ່ງນັ້ນ, ຖ້າບໍ່ແມ່ນ, ຫຼືຖ້າມີຂໍ້ຜິດພາດເກີດຂື້ນ, ມັນຈະອອກດ້ວຍຄ່າທີ່ບໍ່ແມ່ນສູນ.

TUTORIAL


FileCheck ຖືກນໍາໃຊ້ໂດຍປົກກະຕິຈາກການທົດສອບການຖົດຖອຍຂອງ LLVM, ຖືກເອີ້ນຢູ່ໃນເສັ້ນ RUN ຂອງ
ການທົດສອບ. ຕົວຢ່າງງ່າຍໆຂອງການໃຊ້ FileCheck ຈາກເສັ້ນ RUN ເບິ່ງຄືວ່ານີ້:

; ແລ່ນ: llvm-as < %s | llc -march=x86-64 | FileCheck %s

syntax ນີ້ບອກວ່າຈະທໍ່ໄຟລ໌ປະຈຸບັນ ("%s") ເຂົ້າໄປໃນ llvm-as, ທໍ່ນັ້ນເຂົ້າໄປໃນ llc, ຫຼັງຈາກນັ້ນ
ທໍ່ຜົນຜະລິດຂອງ llc ເຂົ້າໄປໃນ FileCheck. ນີ້ຫມາຍຄວາມວ່າ FileCheck ຈະກວດສອບມັນ
ການປ້ອນຂໍ້ມູນມາດຕະຖານ (ຜົນຜະລິດ llc) ຕໍ່ກັບອາກິວເມັນຊື່ໄຟລ໌ທີ່ລະບຸ (ຕົ້ນສະບັບ .ລ
ໄຟລ໌ທີ່ລະບຸໂດຍ "%s") ເພື່ອເບິ່ງວິທີການເຮັດວຽກນີ້, ໃຫ້ເບິ່ງສ່ວນທີ່ເຫຼືອຂອງ .ລ ເອກະສານ
(ຫຼັງ​ຈາກ​ເສັ້ນ RUN):

ກໍານົດ void @sub1(i32* %p, i32 %v) {
ເຂົ້າ:
; ກວດເບິ່ງ: ຍ່ອຍ 1:
; ກວດສອບ: subl
%0 = ຫາງໂທ i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
ret void
}

ກໍານົດ void @inc4(i64* %p) {
ເຂົ້າ:
; ກວດເບິ່ງ: inc4:
; ກວດສອບ: incq
%0 = ຫາງໂທ i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
ret void
}

ທີ່ນີ້ເຈົ້າສາມາດເຫັນບາງ "ກວດເບິ່ງ:" ເສັ້ນທີ່ລະບຸໄວ້ໃນຄໍາເຫັນ. ໃນປັດຈຸບັນທ່ານສາມາດເບິ່ງວິທີການໄຟລ໌
ຖືກທໍ່ເຂົ້າໄປໃນ llvm-as, ຫຼັງຈາກນັ້ນ llc, ແລະຜົນຜະລິດລະຫັດເຄື່ອງແມ່ນສິ່ງທີ່ພວກເຮົາກໍາລັງກວດສອບ.
FileCheck ກວດເບິ່ງຜົນຜະລິດລະຫັດເຄື່ອງເພື່ອກວດສອບວ່າມັນກົງກັບສິ່ງທີ່ "ກວດເບິ່ງ:"ສາຍ
ລະບຸ.

syntax ຂອງ "ກວດເບິ່ງ:" ເສັ້ນແມ່ນງ່າຍດາຍຫຼາຍ: ພວກເຂົາເປັນສາຍຄົງທີ່ຈະຕ້ອງເກີດຂື້ນໃນ
ສັ່ງ. FileCheck ເລີ່ມຕົ້ນທີ່ຈະບໍ່ສົນໃຈຄວາມແຕກຕ່າງທາງນອນຕາມລວງນອນ (ເຊັ່ນ: ຊ່ອງຫວ່າງ
ອະ​ນຸ​ຍາດ​ໃຫ້​ກົງ​ກັບ​ແຖບ​) ແຕ່​ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​, ເນື້ອ​ໃນ​ຂອງ ".ກວດເບິ່ງ:" ເສັ້ນແມ່ນຕ້ອງການ
ກົງກັບບາງສິ່ງທີ່ຢູ່ໃນໄຟລ໌ທົດສອບຢ່າງແທ້ຈິງ.

ສິ່ງຫນຶ່ງທີ່ສວຍງາມກ່ຽວກັບ FileCheck (ເມື່ອປຽບທຽບກັບ grep) ແມ່ນວ່າມັນອະນຸຍາດໃຫ້ປະສົມປະສານກໍລະນີທົດສອບ
ຮ່ວມກັນເປັນກຸ່ມຢ່າງມີເຫດຜົນ. ສໍາລັບຕົວຢ່າງ, ເນື່ອງຈາກວ່າການທົດສອບຂ້າງເທິງແມ່ນການກວດສອບສໍາລັບ
"ຍ່ອຍ 1:"ແລະ"inc4:"ປ້າຍຊື່, ມັນຈະບໍ່ກົງກັນເວັ້ນເສຍແຕ່ວ່າມີ "ຍ່ອຍ"ໃນລະຫວ່າງນັ້ນ
ປ້າຍກຳກັບ. ຖ້າມັນມີຢູ່ບ່ອນອື່ນໃນໄຟລ໌, ນັ້ນຈະບໍ່ນັບ: "grep ຍ່ອຍ"
ກົງກັນຖ້າ "ຍ່ອຍ" ມີຢູ່ທຸກບ່ອນໃນໄຟລ໌.

ໄດ້ FileCheck -check-prefix ທາງເລືອກ
FileCheck -check-prefix ທາງ​ເລືອກ​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ຕັ້ງ​ຄ່າ​ການ​ທົດ​ສອບ​ຫຼາຍ​ໄດ້​ຮັບ​ການ​ຂັບ​ເຄື່ອນ​ຈາກ​
ຫນຶ່ງ .ລ ໄຟລ໌. ນີ້ແມ່ນເປັນປະໂຫຍດໃນຫຼາຍສະຖານະການ, ສໍາລັບການຍົກຕົວຢ່າງ, ການທົດສອບທີ່ແຕກຕ່າງກັນ
variants ຖາປັດຕະຍະກັບ llc. ນີ້ແມ່ນຕົວຢ່າງທີ່ງ່າຍດາຍ:

; ແລ່ນ: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
; ແລ່ນ: | FileCheck %s -check-prefix=X32
; ແລ່ນ: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
; ແລ່ນ: | FileCheck %s -check-prefix=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: pinsrd_1:
; X32: pinsrd $1, 4(%esp), %xmm0

; X64: pinsrd_1:
; X64: pinsrd $1, %edi, %xmm0
}

ໃນກໍລະນີນີ້, ພວກເຮົາກໍາລັງທົດສອບວ່າພວກເຮົາໄດ້ຮັບການຜະລິດລະຫັດທີ່ຄາດວ່າຈະມີທັງ 32-bit ແລະ
ການສ້າງລະຫັດ 64-bit.

ໄດ້ ກວດເບິ່ງຕໍ່ໄປ: directive
ບາງຄັ້ງທ່ານຕ້ອງການຈັບຄູ່ເສັ້ນ ແລະຕ້ອງການກວດສອບວ່າກົງກັນເກີດຂຶ້ນແທ້
ສາຍຕິດຕໍ່ກັນທີ່ບໍ່ມີສາຍອື່ນຢູ່ໃນລະຫວ່າງພວກມັນ. ໃນກໍລະນີດັ່ງກ່າວນີ້, ທ່ານສາມາດນໍາໃຊ້ ".ກວດເບິ່ງ:"
ແລະ "ກວດເບິ່ງຕໍ່ໄປ:" ຄຳສັ່ງເພື່ອລະບຸອັນນີ້. ຖ້າທ່ານລະບຸຄຳນຳໜ້າການກວດສອບແບບກຳນົດເອງ,
ພຽງແຕ່ໃຊ້ "- ຕໍ່ໄປ:". ຕົວຢ່າງ, ບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້ເຮັດວຽກຕາມທີ່ເຈົ້າຄາດຫວັງ:

ກຳນົດ void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
%tmp3 = ໂຫຼດ <2 x double>* %A, ຈັດຮຽງ 16
%tmp7 = insertelement <2 x double> undef, double %B, i32 0
%tmp9 = shufflevector <2 x double> %tmp3,
<2 x double> %tmp7,
<2 x i32> < i32 0, i32 2 >
ຈັດເກັບ <2 x double> %tmp9, <2 x double>* %r, ຈັດຮຽງ 16
ret void

; ກວດເບິ່ງ: t2:
; ກວດສອບ: movl 8(%esp), %eax
; ກວດເບິ່ງ-ຕໍ່ໄປ: movapd (%eax), %xmm0
; ກວດເບິ່ງ-ຕໍ່ໄປ: movhpd 12(%esp), %xmm0
; ກວດເບິ່ງ-ຕໍ່ໄປ: movl 4(%esp), %eax
; ກວດເບິ່ງ-ຕໍ່ໄປ: movapd %xmm0, (%eax)
; ກວດເບິ່ງ-ຕໍ່ໄປ: ret
}

"ກວດເບິ່ງຕໍ່ໄປ:" ຄໍາສັ່ງປະຕິເສດການປ້ອນຂໍ້ມູນເວັ້ນເສຍແຕ່ວ່າມີເສັ້ນໃຫມ່ທີ່ແນ່ນອນລະຫວ່າງມັນ
ແລະຄໍາສັ່ງທີ່ຜ່ານມາ. A "ກວດເບິ່ງຕໍ່ໄປ:" ບໍ່ສາມາດເປັນຄໍາສັ່ງທໍາອິດໃນໄຟລ໌.

ໄດ້ ບໍ່ກວດ: directive
ການ "ບໍ່ກວດ:" ຄໍາສັ່ງແມ່ນໃຊ້ເພື່ອກວດສອບວ່າສະຕຣິງບໍ່ເກີດຂຶ້ນລະຫວ່າງສອງ
ການແຂ່ງຂັນ (ຫຼືກ່ອນການແຂ່ງຂັນຄັ້ງທໍາອິດ, ຫຼືຫຼັງຈາກການແຂ່ງຂັນສຸດທ້າຍ). ຕົວຢ່າງ, ເພື່ອກວດສອບວ່າ
ການໂຫຼດຖືກເອົາອອກໂດຍການຫັນປ່ຽນ, ການທົດສອບເຊັ່ນນີ້ສາມາດນໍາໃຊ້ໄດ້:

ກໍານົດ i8 @coerce_offset0(i32 %V, i32* %P) {
ເກັບຮັກສາ i32 %V, i32* %P

%P2 = bitcast i32* %P ຫາ i8*
%P3 = getelementptr i8* %P2, i32 2

%A = ໂຫຼດ i8* %P3
ret i8 %A
; ກວດເບິ່ງ: @coerce_offset0
; ກວດເບິ່ງ-ບໍ່: ໂຫຼດ
; ກວດເບິ່ງ: ret i8
}

ໄດ້ ກວດເຊັກ: directive
ຖ້າມັນຈໍາເປັນຕ້ອງຈັບຄູ່ສະຕຣິງທີ່ບໍ່ເກີດຂື້ນໃນລໍາດັບລໍາດັບຢ່າງເຂັ້ມງວດ,
"ກວດເຊັກ:"ສາມາດຖືກນໍາໃຊ້ເພື່ອກວດສອບພວກເຂົາລະຫວ່າງສອງການແຂ່ງຂັນ (ຫຼືກ່ອນການແຂ່ງຂັນຄັ້ງທໍາອິດ,
ຫຼືຫຼັງຈາກການແຂ່ງຂັນສຸດທ້າຍ). ຕົວຢ່າງ, clang emits vtable globals ໃນຄໍາສັ່ງປີ້ນກັບກັນ. ການນໍາໃຊ້
ກວດເຊັກ:, ພວກເຮົາສາມາດຮັກສາການກວດສອບໃນຄໍາສັ່ງທໍາມະຊາດ:

// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s

struct Foo { virtual void method(); } ;
ຟູ f; // ປ່ອຍ vtable
// CHECK-DAG: @_ZTV3Foo =

struct Bar { virtual void method(); } ;
ບາ ;
// CHECK-DAG: @_ZTV3Bar =

ບໍ່ກວດ: ຄໍາແນະນໍາສາມາດປະສົມກັບ ກວດເຊັກ: ຄໍາສັ່ງທີ່ຈະຍົກເວັ້ນສາຍລະຫວ່າງ
ອ້ອມ​ຂ້າງ ກວດເຊັກ: ຄຳແນະນຳ. ດັ່ງນັ້ນ, ອ້ອມຂ້າງ ກວດເຊັກ: directives
ບໍ່​ສາ​ມາດ​ໄດ້​ຮັບ​ການ​ຈັດ​ລໍາ​ດັບ​ໃຫມ່​, ເຊັ່ນ​ວ່າ​ການ​ເກີດ​ຂຶ້ນ​ທັງ​ຫມົດ​ທີ່​ກົງ​ກັນ​ ກວດເຊັກ: ກ່ອນທີ່ຈະ ບໍ່ກວດ: ບໍ່ຕ້ອງ
ຕົກຢູ່ຫລັງການປະກົດຕົວທີ່ກົງກັນ ກວດເຊັກ: ຫຼັງຈາກ ບໍ່ກວດ:ທີ່ຢູ່ ຍົກ​ຕົວ​ຢ່າງ,

; ກວດ​ກາ​ເບິ່ງ​: ກ່ອນ​ຫນ້າ​ນັ້ນ​
; ກວດເບິ່ງ-ບໍ່: ບໍ່ແມ່ນ
; ກວດ​ສອບ​ໄດ້​: ຫຼັງ​ຈາກ​

ກໍລະນີນີ້ຈະປະຕິເສດການປ້ອນຂໍ້ມູນໃສ່ບ່ອນທີ່ ກ່ອນ ເກີດຂຶ້ນພາຍຫຼັງ AFTER.

ດ້ວຍຕົວແປທີ່ຈັບໄດ້, ກວດເຊັກ: ສາມາດກົງກັບຄໍາສັ່ງ topological ທີ່ຖືກຕ້ອງຂອງ DAG
ມີຂອບຈາກຄໍານິຍາມຂອງຕົວແປກັບການນໍາໃຊ້ຂອງມັນ. ມັນເປັນປະໂຫຍດ, e.g., ໃນເວລາທີ່ຂອງທ່ານ
ກໍລະນີທົດສອບຕ້ອງກົງກັບລໍາດັບຜົນຜະລິດທີ່ແຕກຕ່າງກັນຈາກຕາຕະລາງຄໍາແນະນໍາ. ສໍາລັບ
ຍົກຕົວຢ່າງ,

; ກວດເຊັກ: ເພີ່ມ [[REG1:r[0-9]+]], r1, r2
; ກວດເຊັກ: ເພີ່ມ [[REG2:r[0-9]+]], r3, r4
; ກວດສອບ: mul r5, [[REG1]], [[REG2]]

ໃນກໍລະນີນີ້, ຄໍາສັ່ງໃດໆຂອງສອງອັນນັ້ນ ເພີ່ມ ຄໍາແນະນໍາຈະຖືກອະນຸຍາດໃຫ້.

ຖ້າທ່ານກໍາລັງກໍານົດ ແລະ ການນໍາໃຊ້ຕົວແປໃນດຽວກັນ ກວດເຊັກ: ຕັນ, ຈົ່ງຮູ້ວ່າ
ກົດລະບຽບການກໍານົດສາມາດກົງກັນ ຫຼັງຈາກ ການ​ນໍາ​ໃຊ້​ຂອງ​ຕົນ​.

ດັ່ງນັ້ນ, ສໍາລັບຕົວຢ່າງ, ລະຫັດຂ້າງລຸ່ມນີ້ຈະຜ່ານ:

; ກວດເບິ່ງ-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]

ໃນຂະນະທີ່ນີ້ສາມາດເປັນປະໂຫຍດຫຼາຍ, ມັນຍັງເປັນອັນຕະລາຍ, ເພາະວ່າໃນກໍລະນີຂອງການລົງທະບຽນ
ລໍາດັບ, ທ່ານຕ້ອງມີຄໍາສັ່ງທີ່ເຂັ້ມແຂງ (ອ່ານກ່ອນຂຽນ, ສໍາເນົາກ່ອນການນໍາໃຊ້, ແລະອື່ນໆ). ຖ້າ
ຄໍານິຍາມການທົດສອບຂອງທ່ານກໍາລັງຊອກຫາບໍ່ກົງກັນ (ເນື່ອງຈາກວ່າມີຂໍ້ຜິດພາດໃນ compiler), ມັນ
ອາດຈະກົງກັນໄກຈາກການນໍາໃຊ້, ແລະປິດບັງແມງໄມ້ທີ່ແທ້ຈິງອອກໄປ.

ໃນກໍລະນີເຫຼົ່ານັ້ນ, ເພື່ອບັງຄັບຄໍາສັ່ງ, ໃຊ້ຄໍາສັ່ງທີ່ບໍ່ແມ່ນ DAG ລະຫວ່າງ DAG-blocks.

ໄດ້ ກວດເຊັກປ້າຍຊື່: directive
ບາງຄັ້ງໃນໄຟລ໌ທີ່ມີການທົດສອບຫຼາຍອັນແບ່ງອອກເປັນຕັນຢ່າງມີເຫດຜົນ, ຫນຶ່ງ ຫຼືຫຼາຍກວ່ານັ້ນ
ກວດເບິ່ງ: ຄໍາແນະນໍາອາດຈະປະສົບຜົນສໍາເລັດໂດຍບໍ່ໄດ້ຕັ້ງໃຈໂດຍການຈັບຄູ່ເສັ້ນໃນບລັອກຕໍ່ມາ. ໃນຂະນະທີ່ ກ
ປົກກະຕິແລ້ວຄວາມຜິດພາດຈະຖືກສ້າງຂື້ນ, ການກວດສອບຖືກທຸງວ່າເປັນການເຮັດໃຫ້ເກີດຄວາມຜິດພາດ
ຕົວຈິງແລ້ວຮັບຜິດຊອບການພົວພັນໃດໆກັບແຫຼ່ງທີ່ແທ້ຈິງຂອງບັນຫາ.

ເພື່ອຜະລິດຂໍ້ຄວາມຄວາມຜິດພາດທີ່ດີກວ່າໃນກໍລະນີເຫຼົ່ານີ້, "ກວດເຊັກປ້າຍຊື່:"ຄໍາສັ່ງສາມາດ
ຖືກນໍາໃຊ້. ມັນໄດ້ຖືກປະຕິບັດຢ່າງດຽວກັນກັບປົກກະຕິ CHECK ຄໍາສັ່ງຍົກເວັ້ນທີ່ FileCheck ເຮັດ
ສົມມຸດຕິຖານເພີ່ມເຕີມວ່າເສັ້ນທີ່ກົງກັນໂດຍຄໍາສັ່ງບໍ່ສາມາດຖືກຈັບຄູ່ໂດຍ
ການກວດສອບອື່ນໆທີ່ມີຢູ່ໃນ ຊື່ໄຟລ໌ທີ່ກົງກັນ; ນີ້ມີຈຸດປະສົງເພື່ອນໍາໃຊ້ສໍາລັບສາຍ
ມີປ້າຍກຳກັບ ຫຼືຕົວລະບຸທີ່ເປັນເອກະລັກອື່ນໆ. ແນວຄວາມຄິດ, ການປະກົດຕົວຂອງ ກວດເຊັກ-LABEL
ແບ່ງກະແສການປ້ອນຂໍ້ມູນອອກເປັນທ່ອນໄມ້ແຍກຕ່າງຫາກ, ແຕ່ລະອັນຈະຖືກປຸງແຕ່ງເປັນເອກະລາດ,
ປ້ອງ​ກັນ ກ ກວດເບິ່ງ: ຄໍາສັ່ງໃນຫນຶ່ງຕັນທີ່ກົງກັບເສັ້ນໃນບລັອກອື່ນ. ຍົກ​ຕົວ​ຢ່າງ,

ກໍານົດ %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
ເຂົ້າ:
; ເຊັກ-LABEL: C_ctor_base:
; ກວດເບິ່ງ: mov [[SAVETHIS:r[0-9]+]], r0
; ກວດເບິ່ງ: bl A_ctor_base
; ກວດເບິ່ງ: mov r0, [[SAVETHIS]]
%0 = bitcast %struct.C* % this to %struct.A*
%call = ຫາງ %struct.A* @A_ctor_base(%struct.A* %0)
%1 = bitcast %struct.C* % this to %struct.B*
%call2 = ການໂທຫາງ %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
ret %struct.C* % ນີ້
}

ກໍານົດ %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
ເຂົ້າ:
; ເຊັກ-LABEL: D_ctor_base:

ການນໍາໃຊ້ຂອງ ກວດເຊັກປ້າຍຊື່: ຄໍາແນະນໍາໃນກໍລະນີນີ້ຮັບປະກັນວ່າສາມ ກວດເບິ່ງ: directives
ພຽງແຕ່ຍອມຮັບສາຍທີ່ສອດຄ້ອງກັນກັບຮ່າງກາຍຂອງ @C_ctor_base ຟັງຊັນ, ເຖິງແມ່ນວ່າ
ຮູບແບບກົງກັບເສັ້ນທີ່ພົບໃນພາຍຫຼັງໃນໄຟລ໌. ນອກຈາກນັ້ນ, ຖ້າຫນຶ່ງໃນສາມນີ້ ກວດເບິ່ງ:
ຄໍາສັ່ງລົ້ມເຫລວ, FileCheck ຈະຟື້ນຕົວໂດຍການສືບຕໍ່ບລັອກຕໍ່ໄປ, ອະນຸຍາດໃຫ້ຫຼາຍ
ການທົດສອບຄວາມລົ້ມເຫຼວທີ່ຈະກວດພົບໃນຄໍາຮ້ອງຂໍດຽວ.

ບໍ່ມີຂໍ້ກໍານົດວ່າ ກວດເຊັກປ້າຍຊື່: ຄໍາສັ່ງປະກອບດ້ວຍສະຕຣິງທີ່ສອດຄ້ອງກັບ
ປ້າຍຊື່ syntactic ຕົວຈິງໃນພາສາແຫຼ່ງຫຼືຜົນໄດ້ຮັບ: ພວກມັນພຽງແຕ່ຕ້ອງກົງກັບ a
ແຖວດຽວໃນໄຟລ໌ທີ່ກໍາລັງກວດສອບ.

ກວດເຊັກປ້າຍຊື່: ຄຳສັ່ງບໍ່ສາມາດມີຄຳນິຍາມ ຫຼືການນຳໃຊ້ທີ່ປ່ຽນແປງໄດ້.

FileCheck ຮູບແບບ ການຈັບຄູ່ syntax
ການ "ກວດເບິ່ງ:"ແລະ"ບໍ່ກວດ:" ຄໍາແນະນໍາທັງສອງໃຊ້ຮູບແບບເພື່ອໃຫ້ກົງກັນ. ສໍາລັບການນໍາໃຊ້ສ່ວນໃຫຍ່
FileCheck, ການຈັບຄູ່ສະຕຣິງຄົງແມ່ນພຽງພໍຢ່າງສົມບູນ. ສໍາລັບບາງສິ່ງ, ເພີ່ມເຕີມ
ຮູບແບບການຈັບຄູ່ທີ່ມີຄວາມຍືດຫຍຸ່ນແມ່ນຕ້ອງການ. ເພື່ອສະຫນັບສະຫນູນນີ້, FileCheck ອະນຸຍາດໃຫ້ທ່ານລະບຸ
ການສະແດງອອກປົກກະຕິໃນສາຍທີ່ຈັບຄູ່, ອ້ອມຮອບດ້ວຍວົງເລັບຄູ່: {{yourregex}}.
ເນື່ອງຈາກວ່າພວກເຮົາຕ້ອງການໃຊ້ການຈັບຄູ່ສະຕຣິງຄົງທີ່ສໍາລັບສ່ວນໃຫຍ່ຂອງສິ່ງທີ່ພວກເຮົາເຮັດ, FileCheck ມີ
ໄດ້​ຮັບ​ການ​ອອກ​ແບບ​ເພື່ອ​ສະ​ຫນັບ​ສະ​ຫນູນ​ການ​ປະ​ສົມ​ແລະ​ການ​ຈັບ​ຄູ່​ສາຍ​ຄົງ​ທີ່​ກົງ​ກັບ​ປົກ​ກະ​ຕິ​
ການສະແດງອອກ. ນີ້ອະນຸຍາດໃຫ້ທ່ານຂຽນສິ່ງຕ່າງໆເຊັ່ນນີ້:

; ກວດເບິ່ງ: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}

ໃນກໍລະນີນີ້, ການຊົດເຊີຍໃດໆຈາກການລົງທະບຽນ ESP ຈະຖືກອະນຸຍາດໃຫ້, ແລະການລົງທະບຽນ xmm ໃດໆ
ອະນຸຍາດ.

ເນື່ອງຈາກວ່າການສະແດງອອກເປັນປົກກະຕິໄດ້ຖືກຫຸ້ມດ້ວຍວົງເລັບຄູ່, ພວກມັນມີຄວາມແຕກຕ່າງກັນທາງສາຍຕາ,
ແລະທ່ານບໍ່ ຈຳ ເປັນຕ້ອງໃຊ້ຕົວອັກສອນຫລົບ ໜີ ພາຍໃນວົງເລັບສອງເທົ່າທີ່ເຈົ້າຕ້ອງການໃນ C.
ໃນກໍລະນີທີ່ຫາຍາກທີ່ທ່ານຕ້ອງການຈັບຄູ່ວົງເລັບສອງຢ່າງຢ່າງຊັດເຈນຈາກການປ້ອນຂໍ້ມູນ, ທ່ານສາມາດເຮັດໄດ້
ໃຊ້ສິ່ງທີ່ບໍ່ດີເຊັ່ນ {{[{][{]}} ເປັນ​ຮູບ​ແບບ​ຂອງ​ທ່ານ​.

FileCheck Variables
ມັນມັກຈະເປັນປະໂຫຍດທີ່ຈະຈັບຄູ່ຮູບແບບແລະຫຼັງຈາກນັ້ນກວດສອບວ່າມັນເກີດຂຶ້ນອີກເທື່ອຫນຶ່ງໃນພາຍຫຼັງ
ໄຟລ໌. ສໍາລັບການທົດສອບ codegen, ນີ້ສາມາດເປັນປະໂຫຍດທີ່ຈະອະນຸຍາດໃຫ້ລົງທະບຽນໃດກໍ່ຕາມ, ແຕ່ກວດສອບວ່າ
ການລົງທະບຽນແມ່ນຖືກນໍາໃຊ້ຢ່າງຕໍ່ເນື່ອງຕໍ່ມາ. ເພື່ອເຮັດສິ່ງນີ້, FileCheck ອະນຸຍາດໃຫ້ຕົວແປທີ່ມີຊື່
ກໍານົດແລະທົດແທນເຂົ້າໄປໃນຮູບແບບ. ນີ້ແມ່ນຕົວຢ່າງທີ່ງ່າຍດາຍ:

; ກວດ​ສອບ​: test5​:
; ກວດເບິ່ງ: notw [[ລົງທະບຽນ:%[az]+]]
; ກວດເບິ່ງ: andw {{.*}}[[ລົງທະບຽນ]]

ເສັ້ນກວດທໍາອິດກົງກັບ regex %[az]+ ແລະຈັບມັນເຂົ້າໄປໃນຕົວແປ ເຂົ້າສູ່ລະບົບ.
ແຖວທີສອງຢັ້ງຢືນວ່າອັນໃດຢູ່ໃນ ເຂົ້າສູ່ລະບົບ ເກີດຂຶ້ນຕໍ່ມາໃນໄຟລ໌ຫຼັງຈາກ an
"Andw". FileCheck ການອ້າງອີງຕົວແປແມ່ນບັນຈຸຢູ່ໃນສະເຫມີ [[ ]] ຄູ່, ແລະຂອງເຂົາເຈົ້າ
ຊື່ສາມາດຖືກສ້າງຕັ້ງຂຶ້ນດ້ວຍ regex [a-zA-Z][a-zA-Z0-9]*. ຖ້າຈໍ້າສອງເມັດຕາມຊື່,
ຫຼັງຈາກນັ້ນມັນເປັນຄໍານິຍາມຂອງຕົວແປ; ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນເປັນການນໍາໃຊ້.

FileCheck ຕົວແປສາມາດຖືກກໍານົດຫຼາຍຄັ້ງ, ແລະການນໍາໃຊ້ສະເຫມີໄດ້ຮັບຄ່າຫລ້າສຸດ.
ຕົວແປຍັງສາມາດຖືກນໍາໃຊ້ຕໍ່ມາໃນແຖວດຽວກັນທີ່ພວກເຂົາຖືກກໍານົດໄວ້. ຍົກ​ຕົວ​ຢ່າງ:

; ກວດເບິ່ງ: op [[REG:r[0-9]+]], [[REG]]

ສາມາດເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານຕ້ອງການ operands ຂອງ op ຈະເປັນທະບຽນດຽວກັນ, ແລະບໍ່ສົນໃຈ
ແນ່ນອນວ່າມັນເປັນການລົງທະບຽນໃດ.

FileCheck ສຳ ນວນ
ບາງຄັ້ງມີຄວາມຕ້ອງການທີ່ຈະກວດສອບຜົນຜະລິດທີ່ຫມາຍເຖິງຕົວເລກແຖວຂອງໄຟລ໌ທີ່ກົງກັນ,
ຕົວຢ່າງ: ເມື່ອທົດສອບການວິນິດໄສ compiler. ນີ້ແນະນໍາຄວາມອ່ອນແອທີ່ແນ່ນອນຂອງການແຂ່ງຂັນ
ໂຄງສ້າງໄຟລ໌, ເປັນ "ກວດເບິ່ງ:" ແຖວມີຕົວເລກເສັ້ນຢ່າງແທ້ຈິງຢູ່ໃນໄຟລ໌ດຽວກັນ, ເຊິ່ງ
ຕ້ອງໄດ້ຮັບການປັບປຸງທຸກຄັ້ງທີ່ຕົວເລກແຖວມີການປ່ຽນແປງເນື່ອງຈາກການເພີ່ມຂໍ້ຄວາມຫຼືການລຶບ.

ເພື່ອສະຫນັບສະຫນູນກໍລະນີນີ້, FileCheck ອະນຸຍາດໃຫ້ນໍາໃຊ້ [[@LINE]], [[@LINE+ ]],
[[@LINE- ]] ການສະແດງອອກໃນຮູບແບບ. ການສະແດງອອກເຫຼົ່ານີ້ຂະຫຍາຍໄປສູ່ຈໍານວນຂອງ
ເສັ້ນ​ທີ່​ຮູບ​ແບບ​ຕັ້ງ​ຢູ່ (ໂດຍ​ມີ​ການ​ຊົດ​ເຊີຍ integer ທາງ​ເລືອກ​)​.

ວິທີນີ້ຮູບແບບການຈັບຄູ່ສາມາດຖືກວາງຢູ່ໃກ້ກັບສາຍການທົດສອບທີ່ກ່ຽວຂ້ອງແລະປະກອບມີເສັ້ນທີ່ກ່ຽວຂ້ອງ
ການອ້າງອີງຕົວເລກ, ສໍາລັບການຍົກຕົວຢ່າງ:

// ກວດເບິ່ງ: test.cpp:[[@LINE+4]]:6: error: expect ';' ຫຼັງຈາກຜູ້ປະກາດລະດັບສູງສຸດ
// ກວດເບິ່ງ-ຕໍ່ໄປ: {{^int a}}
// ກວດເບິ່ງ-ຕໍ່ໄປ: {{^ \^}}
// ກວດເບິ່ງ-ຕໍ່ໄປ: {{^ ;}}
int a

ໃຊ້ FileCheck-3.6 ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

  • 1
    Eclipse Tomcat Plugin
    Eclipse Tomcat Plugin
    Eclipse Tomcat Plugin ໃຫ້
    ການປະສົມປະສານງ່າຍດາຍຂອງ servlet tomcat
    container ສໍາລັບການພັດທະນາຂອງ java
    ຄໍາຮ້ອງສະຫມັກເວັບໄຊຕ໌. ທ່ານສາມາດເຂົ້າຮ່ວມກັບພວກເຮົາສໍາລັບ
    ສົນທະນາ...
    ດາວໂຫລດ Eclipse Tomcat Plugin
  • 2
    Webstorrent Desktop
    Webstorrent Desktop
    WebTorrent Desktop ແມ່ນສໍາລັບການຖ່າຍທອດ
    torrents ໃນ Mac, Windows ຫຼື Linux. ມັນ
    ເຊື່ອມຕໍ່ກັບທັງ BitTorrent ແລະ
    ມິດສະຫາຍ WebTorrent. ໃນປັດຈຸບັນບໍ່ມີ
    ຈໍາ​ເປັນ​ຕ້ອງ​ລໍ​ຖ້າ ...
    ດາວໂຫລດ WebTorrent Desktop
  • 3
    GenX
    GenX
    GenX ແມ່ນໂຄງການວິທະຍາສາດເພື່ອປັບປຸງໃຫມ່
    ການສະທ້ອນແສງ x-ray, ນິວຕຣອນ
    ການສະທ້ອນແສງ ແລະ x-ray ພື້ນຜິວ
    ຂໍ້​ມູນ​ການ​ຫັນ​ປ່ຽນ​ໂດຍ​ນໍາ​ໃຊ້​ຄວາມ​ແຕກ​ຕ່າງ​
    ຂັ້ນຕອນວິວັດທະນາການ....
    ດາວໂຫລດ GenX
  • 4
    pspp4windows
    pspp4windows
    PSPP ແມ່ນໂຄງການສໍາລັບສະຖິຕິ
    ການວິເຄາະຂໍ້ມູນຕົວຢ່າງ. ມັນເປັນຟຣີ
    ການທົດແທນໂຄງການທີ່ເປັນເຈົ້າຂອງ
    SPSS. PSPP ມີທັງຂໍ້ຄວາມທີ່ອີງໃສ່ແລະ
    ຮູບພາບພວກເຮົາ ...
    ດາວໂຫລດ pspp4windows
  • 5
    Git ສ່ວນຂະຫຍາຍ
    Git ສ່ວນຂະຫຍາຍ
    Git Extensions ເປັນເຄື່ອງມື UI ແບບດ່ຽວ
    ສໍາລັບການຄຸ້ມຄອງ Git repositories. ມັນຍັງ
    ປະສົມປະສານກັບ Windows Explorer ແລະ
    Microsoft Visual Studio
    (2015/2017/2019). ທ...
    ດາວໂຫລດ Git Extensions
  • 6
    eSpeak: ການສັງເຄາະການປາກເວົ້າ
    eSpeak: ການສັງເຄາະການປາກເວົ້າ
    Text to Speech engine ສໍາລັບພາສາອັງກິດ ແລະ
    ພາ​ສາ​ອື່ນໆ​ຈໍາ​ນວນ​ຫຼາຍ​. ຂະຫນາດກະທັດລັດກັບ
    ການອອກສຽງທີ່ຊັດເຈນແຕ່ປອມ.
    ມີຢູ່ໃນໂຄງການເສັ້ນຄໍາສັ່ງທີ່ມີ
    ຫຼາຍ...
    ດາວໂຫລດ eSpeak: ການສັງເຄາະສຽງເວົ້າ
  • ເພີ່ມເຕີມ »

Linux ຄຳ ສັ່ງ

Ad