Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update test cases to LLVM 12.0 #195

Closed
mewmew opened this issue Jul 18, 2021 · 4 comments
Closed

update test cases to LLVM 12.0 #195

mewmew opened this issue Jul 18, 2021 · 4 comments

Comments

@mewmew
Copy link
Member

mewmew commented Jul 18, 2021

Similar steps taken to those detailed in #132.

Update of llir/testdata/llvm/Makefile:

 # LLVM version.
-VER=11.0.0
+VER=12.0.1

Update *.ll test cases of LLVM

cd testdata/llvm
make
./skip.sh
git add testdata/llvm/test testdata/llvm/Makefile
git commit -m 'llvm: update test cases to LLVM 12.0.1 release'
@mewmew
Copy link
Member Author

mewmew commented Jul 18, 2021

Run tests and check for mismatches

From llir/llvm directory, run:

go test -v ./...

Failing golden test cases

Search for mismatch in test case output:

asm_test.go:531: module "../testdata/llvm/test/Transforms/InstCombine/vec_demanded_elts.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Transforms/InstSimplify/compare.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Transforms/Attributor/nonnull.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Feature/OperandBundles/adce.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Feature/OperandBundles/early-cse.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Feature/optnone-opt.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Assembler/2008-01-11-VarargAttrs.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Assembler/ConstantExprNoFold.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/Assembler/disubprogram.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/CodeGen/X86/extractps.ll.golden" mismatch (-want +got):
asm_test.go:531: module "../testdata/llvm/test/DebugInfo/X86/safestack-byval.ll.golden" mismatch (-want +got):

Failing with syntax error

Search for syntax error at line in test case output:

asm_test.go:516: unable to parse "../testdata/llvm/test/Bitcode/compatibility.ll" into AST; syntax error at line 46
asm_test.go:516: unable to parse "../testdata/llvm/test/DebugInfo/ARM/selectiondag-deadcode.ll" into AST; syntax error at line 4
asm_test.go:516: unable to parse "../testdata/llvm/test/Feature/callingconventions.ll" into AST; syntax error at line 14
asm_test.go:516: unable to parse "../testdata/llvm/test/Assembler/dimodule.ll" into AST; syntax error at line 21

mewmew added a commit to mewpull/testdata that referenced this issue Jul 18, 2021
@mewmew
Copy link
Member Author

mewmew commented Jul 18, 2021

Notes on how the golden test cases were updated in commit mewpull/testdata@3ccdb27

Update golden test cases

test/Transforms/InstCombine/vec_demanded_elts.ll

git diff HEAD^1 -- test/Transforms/InstCombine/vec_demanded_elts.ll | grep -v "^[+-];" | grep "^[+]"
+++ b/llvm/test/Transforms/InstCombine/vec_demanded_elts.ll
+
+define <4 x float> @ins_of_ext(<4 x float> %x, float %y) {
+  %e0 = extractelement <4 x float> %x, i32 0
+  %i0 = insertelement <4 x float> undef, float %e0, i32 0
+  %i1 = insertelement <4 x float> %i0, float %y, i32 1
+  %i2 = insertelement <4 x float> %i1, float %y, i32 2
+  %i3 = insertelement <4 x float> %i2, float %y, i32 3
+  ret <4 x float> %i3
+}
+
+define <4 x float> @ins_of_ext_twice(<4 x float> %x, float %y) {
+  %e0 = extractelement <4 x float> %x, i32 0
+  %i0 = insertelement <4 x float> undef, float %e0, i32 0
+  %e1 = extractelement <4 x float> %x, i32 1
+  %i1 = insertelement <4 x float> %i0, float %e1, i32 1
+  %i2 = insertelement <4 x float> %i1, float %y, i32 2
+  %i3 = insertelement <4 x float> %i2, float %y, i32 3
+  ret <4 x float> %i3
+}
+
+
+define <4 x float> @ins_of_ext_wrong_demand(<4 x float> %x, float %y) {
+  %e0 = extractelement <4 x float> %x, i32 0
+  %i0 = insertelement <4 x float> undef, float %e0, i32 0
+  %i1 = insertelement <4 x float> %i0, float %y, i32 1
+  %i2 = insertelement <4 x float> %i1, float %y, i32 2
+  ret <4 x float> %i2
+}
+
+
+define <4 x float> @ins_of_ext_wrong_type(<5 x float> %x, float %y) {
+  %e0 = extractelement <5 x float> %x, i32 0
+  %i0 = insertelement <4 x float> undef, float %e0, i32 0
+  %i1 = insertelement <4 x float> %i0, float %y, i32 1
+  %i2 = insertelement <4 x float> %i1, float %y, i32 2
+  %i3 = insertelement <4 x float> %i2, float %y, i32 3
+  ret <4 x float> %i3
+}
+
+
+define <4 x i4> @ins_of_ext_undef_elts_propagation(<4 x i4> %v, <4 x i4> %v2, i4 %x) {
+  %v0 = extractelement <4 x i4> %v, i32 0
+  %t0 = insertelement <4 x i4> undef, i4 %v0, i32 0
+  %t2 = insertelement <4 x i4> %t0, i4 %x, i32 2
+  %r = shufflevector <4 x i4> %t2, <4 x i4> %v2, <4 x i32> <i32 0, i32 6, i32 2, i32 7>
+  ret <4 x i4> %r
+}
+
+
+define <8 x i4> @ins_of_ext_undef_elts_propagation2(<8 x i4> %v, <8 x i4> %v2, i4 %x) {
+  %i15 = extractelement <8 x i4> %v, i32 0
+  %i16 = insertelement <8 x i4> undef, i4 %i15, i32 0
+  %i17 = extractelement <8 x i4> %v, i32 1
+  %i18 = insertelement <8 x i4> %i16, i4 %i17, i32 1
+  %i19 = insertelement <8 x i4> %i18, i4 %x, i32 2
+  %i20 = shufflevector <8 x i4> %i19, <8 x i4> %v2, <8 x i32> <i32 0, i32 1, i32 2, i32 11, i32 10, i32 9, i32 8, i32 undef>
+  %i21 = shufflevector <8 x i4> %i20, <8 x i4> %v, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 15>
+  ret <8 x i4> %i21
+}

From the git diff output we see that several new function definitions have been added. Copy these from vec_demanded_elts.ll to vec_demanded_elts.ll.golden and add each function to their corresponding source code position. Update formatting (e.g. using tags instead of spaces for indentation) and remove line comments for the *.ll.golden file.

test/Transforms/Attributor/nonnull.ll

git diff HEAD^1 -- test/Transforms/Attributor/nonnull.ll | grep -v "^[+-];" | grep "^[+]"
+++ b/llvm/test/Transforms/Attributor/nonnull.ll
+declare i8 @use1safecall(i8* %x) readonly nounwind willreturn ; nounwind+willreturn guarantees that execution continues to successor
+declare i8* @strrchr(i8* %0, i32 %1) nofree nounwind readonly willreturn
+define i8* @nonnull_function_ptr_1() {
+  %bc = bitcast i8*()* @nonnull_function_ptr_1 to i8*
+  ret i8* %bc
+}
+
+declare i8* @function_decl()
+define i8* @nonnull_function_ptr_2() {
+  %bc = bitcast i8*()* @function_decl to i8*
+  ret i8* %bc
+}
+
+define void @nonnull_caller(i8* %p) {
+  call void @nonnull_callee(i8* %p)
+  ret void
+}
+
+declare void @nonnull_callee(i8* nonnull %p)
+

A few new function definitions and declaration have been added. Follow the same steps for nonnull.ll as we did for vec_demanded_elts.ll to update the golden test case file nonnull.ll.golden.

test/Feature/OperandBundles/adce.ll

git diff HEAD^1 -- test/Feature/OperandBundles/adce.ll | grep -v "^[+-];" | grep "^[+]"
+++ b/llvm/test/Feature/OperandBundles/adce.ll
+declare void @readonly_function() readonly nounwind willreturn
+declare void @readnone_function() readnone nounwind willreturn

Only two new function declarations have been updated (the function attribute willreturn was added).

Search for them in test/Feature/OperandBundles/adce.ll and add them to test/Feature/OperandBundles/adce.ll.golden at the corresponding place in the source file.

test/Feature/OperandBundles/early-cse.ll

git diff HEAD^1 -- test/Feature/OperandBundles/early-cse.ll | grep -v "^[+-];" | grep "^[+]"
+++ b/llvm/test/Feature/OperandBundles/early-cse.ll
+declare void @readonly_function() readonly nounwind willreturn
+declare void @readnone_function() readnone nounwind willreturn

Same procedure as adce.ll

test/Feature/optnone-opt.ll

git diff HEAD^1 -- test/Feature/optnone-opt.ll | grep -v "^[+-];"
--- a/llvm/test/Feature/optnone-opt.ll
+++ b/llvm/test/Feature/optnone-opt.ll
@@ -11,7 +18,7 @@
 ; optimizations on optnone functions.

 ; Function Attrs: noinline optnone
-define i32 @_Z3fooi(i32 %x) #0 {
+define i32 @foo(i32 %x) #0 {
 entry:
   %x.addr = alloca i32, align 4
   store i32 %x, i32* %x.addr, align 4
@@ -28,38 +35,67 @@ while.body:                                       ; preds = %while.cond
   br label %while.cond

 while.end:                                        ; preds = %while.cond
-  ret i32 0
+  ret i32 %dec
 }

Update function name from @_Z3fooi (C++ name mangled) to @foo and update return argument from i32 0 to i32 %dec.

test/Assembler/2008-01-11-VarargAttrs.ll

git diff HEAD^1 -- test/Assembler/2008-01-11-VarargAttrs.ll
--- a/llvm/test/Assembler/2008-01-11-VarargAttrs.ll
+++ b/llvm/test/Assembler/2008-01-11-VarargAttrs.ll
@@ -6,6 +6,6 @@
 declare void @foo(...)

 define void @bar() {
-       call void (...) @foo(%struct* byval null )
+       call void (...) @foo(%struct* byval(%struct) null )
        ret void
 }

The parameter attribute (byval) syntax has been updated. Update the golden test case file 2008-01-11-VarargAttrs.ll.golden accordingly.

test/Assembler/ConstantExprNoFold.ll

git diff HEAD^1 -- test/Assembler/ConstantExprNoFold.ll
--- a/llvm/test/Assembler/ConstantExprNoFold.ll
+++ b/llvm/test/Assembler/ConstantExprNoFold.ll
@@ -42,6 +42,12 @@ target datalayout = "p:32:32"
 @empty.2 = external global [0 x i8], align 1
 @empty.cmp = global i1 icmp eq ([0 x i8]* @empty.1, [0 x i8]* @empty.2)

+; Two unnamed_addr globals can share an address
+; CHECK: @unnamed.cmp = global i1 icmp eq ([5 x i8]* @unnamed.1, [5 x i8]* @unnamed.2)
+@unnamed.1 = unnamed_addr constant [5 x i8] c"asdf\00"
+@unnamed.2 = unnamed_addr constant [5 x i8] c"asdf\00"
+@unnamed.cmp = global i1 icmp eq ([5 x i8]* @unnamed.1, [5 x i8]* @unnamed.2)
+
 @addrspace3 = internal addrspace(3) global i32 undef

 ; CHECK: @no.fold.addrspace.icmp.eq.gv.null = global i1 icmp eq (i32 addrspace(3)* @addrspace3, i32 addrspace(3)* null)

Three new global variable definition have been added to ConstantExprNoFold.ll. Copy them to the golden test case file ConstantExprNoFold.ll.golden.

test/Assembler/disubprogram.ll

git diff HEAD^1 -- test/Assembler/disubprogram.ll
--- a/llvm/test/Assembler/disubprogram.ll
+++ b/llvm/test/Assembler/disubprogram.ll
@@ -25,8 +25,8 @@ define void @_Z3foov() !dbg !9 {
                              isOptimized: true, flags: "-O2",
                              splitDebugFilename: "abc.debug", emissionKind: 2)

-; CHECK: !9 = !DISubprogram(scope: null, spFlags: 0)
-!9 = !DISubprogram(isDefinition: false)
+; CHECK: !9 = distinct !DISubprogram(scope: null, spFlags: 0)
+!9 = distinct !DISubprogram(isDefinition: false)

 ; CHECK: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, file: !2, line: 7, type: !3, scopeLine: 8, containingType: !4, virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !8, templateParams: !5, declaration: !9, retainedNodes: !6)
 !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1,

The specialized metadata field !DISubprogram has been made distinct. Update the golden test case file disubprogram.ll.golden accordingly.

test/CodeGen/X86/extractps.ll

git diff HEAD^1 -- test/CodeGen/X86/extractps.ll
--- a/llvm/test/CodeGen/X86/extractps.ll
+++ b/llvm/test/CodeGen/X86/extractps.ll
@@ -2,7 +2,7 @@
 ; RUN: llc < %s -mtriple=i686-- -mcpu=penryn | FileCheck %s
 ; PR2647

-@0 = external global float, align 16         ; <float*>:0 [#uses=2]
+@0 = external dso_local global float, align 16         ; <float*>:0 [#uses=2]

 define internal void @a() nounwind {
 ; CHECK-LABEL: a:

The global variable declaration @0 has been made dso_local in extractps.ll. Update the golden test case file extractps.ll.golden accordingly.

test/DebugInfo/X86/safestack-byval.ll

git diff HEAD^1 -- test/DebugInfo/X86/safestack-byval.ll
--- a/llvm/test/DebugInfo/X86/safestack-byval.ll
+++ b/llvm/test/DebugInfo/X86/safestack-byval.ll
@@ -21,7 +21,7 @@
 @__safestack_unsafe_stack_ptr = external thread_local(initialexec) global i8*

 ; Function Attrs: norecurse nounwind readonly safestack uwtable
-define i32 @_Z1f1Sm(%struct.S* byval nocapture readonly align 8 %zzz, i64 %len) #0 !dbg !12 {
+define i32 @_Z1f1Sm(%struct.S* byval(%struct.S) nocapture readonly align 8 %zzz, i64 %len) #0 !dbg !12 {
 entry:
   %unsafe_stack_ptr = load i8*, i8** @__safestack_unsafe_stack_ptr, !dbg !22
   %unsafe_stack_static_top = getelementptr i8, i8* %unsafe_stack_ptr, i32 -400, !dbg !22

The parameter attribute (byval) syntax has been updated. Update the golden test case file safestack-byval.ll.golden accordingly.

test/Transforms/InstSimplify/compare.ll.golden

git diff HEAD^1 -- test/Transforms/InstSimplify/compare.ll

The compare.ll has had a lot of new function definitions added. Copy them over from compare.ll to the golden test case file compare.ll.golden and add each function to their corresponding source code position. Update formatting (e.g. using tags instead of spaces for indentation) and remove line comments for the *.ll.golden file.

@mewmew
Copy link
Member Author

mewmew commented Jul 18, 2021

Parse errors

The following test case files require updates to the LLVM IR grammar (for inspiration, see #101 for updating the grammar to LLVM 9.0).

For errors like asm_test.go:516: unable to parse "../testdata/llvm/test/Bitcode/compatibility.ll" into AST; syntax error at line 46:

mewmew added a commit to mewpull/testdata that referenced this issue Jul 18, 2021
mewmew added a commit to mewpull/testdata that referenced this issue Jul 18, 2021
mewmew added a commit to mewpull/testdata that referenced this issue Jul 18, 2021
First, update to latest gllvm [1] version.

	go get github.com/SRI-CSL/gllvm@latest
	go install github.com/SRI-CSL/gllvm/cmd/...@latest

Then, update coreutils test case:

	cd testdata/coreutils
	make

[1]: https://github.com/SRI-CSL/gllvm

Updates llir/llvm#195.
mewmew added a commit to mewpull/testdata that referenced this issue Jul 18, 2021
mewmew added a commit to mewpull/testdata that referenced this issue Jul 19, 2021
mewmew added a commit to llir/testdata that referenced this issue Jul 19, 2021
* llvm: update test cases to LLVM 12.0.1 release

* llvm: update golden test cases for LLVM 12.0.1

Updates llir/llvm#195.

* llvm: update sret parameter attribute syntax to LLVM 12.0

Updates llir/llvm#195.

* llvm: update golden test case dimodule.ll.golden to LLVM 12.0

Updates llir/llvm#195.

* coreutils: re-generate Coreutils test cases using LLVM 12.0

First, update to latest gllvm [1] version.

	go get github.com/SRI-CSL/gllvm@latest
	go install github.com/SRI-CSL/gllvm/cmd/...@latest

Then, update coreutils test case:

	cd testdata/coreutils
	make

[1]: https://github.com/SRI-CSL/gllvm

Updates llir/llvm#195.

* sqlite: re-generate SQLite test cases using LLVM 12.0

	cd testdata/sqlite
	make

Updates llir/llvm#195.

* llvm: update golden test case compatibility.ll.golden to LLVM 12.0

Updates #llir/llvm#195.

* tools: update Go build tag (use go:build instead of +build prefix)

* coreutils: update golden test cases of Coreutils tests
@mewmew
Copy link
Member Author

mewmew commented Jul 19, 2021

Fixed by PR llir/testdata#9.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant