regres: Update to LLVM 17.0.6

LLVM 10 is ancient, and doesn't run on more modern ubuntu versions due to out of date shared object dependencies.

Change-Id: I1cb5d9580721d542126becb8e63ca629e75c9eb8
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/73488
Tested-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Presubmit-Ready: Ben Clayton <bclayton@google.com>
Commit-Queue: Shahbaz Youssefi <syoussefi@google.com>
Tested-by: Shahbaz Youssefi <syoussefi@google.com>
diff --git a/tests/regres/cmd/regres/main.go b/tests/regres/cmd/regres/main.go
index 6f014a3..f51b63e 100644
--- a/tests/regres/cmd/regres/main.go
+++ b/tests/regres/cmd/regres/main.go
@@ -80,7 +80,7 @@
 
 var (
 	numParallelTests = runtime.NumCPU()
-	llvmVersion      = llvm.Version{Major: 10}
+	llvmVersion      = llvm.Version{Major: 17, Point: 6}
 
 	cacheDir        = flag.String("cache", "cache", "path to the output cache directory")
 	gerritEmail     = flag.String("email", "$SS_REGRES_EMAIL", "gerrit email address for posting regres results")
diff --git a/tests/regres/llvm/llvm.go b/tests/regres/llvm/llvm.go
index 8b55964..7d1d61b 100644
--- a/tests/regres/llvm/llvm.go
+++ b/tests/regres/llvm/llvm.go
@@ -32,7 +32,7 @@
 	"swiftshader.googlesource.com/SwiftShader/tests/regres/util"
 )
 
-const maxLLVMVersion = 10
+const maxLLVMVersion = 17
 
 // Version holds the build version information of an LLVM toolchain.
 type Version struct {
@@ -83,20 +83,22 @@
 		return nil, fmt.Errorf("Could not download LLVM from %v: %v", url, err)
 	}
 
-	sigfile, err := os.Open(sig)
-	if err != nil {
-		return nil, fmt.Errorf("Couldn't open file '%s': %v", sig, err)
-	}
-	defer sigfile.Close()
+	if sig != "" {
+		sigfile, err := os.Open(sig)
+		if err != nil {
+			return nil, fmt.Errorf("Couldn't open file '%s': %v", sig, err)
+		}
+		defer sigfile.Close()
 
-	keyfile, err := os.Open(key)
-	if err != nil {
-		return nil, fmt.Errorf("Couldn't open file '%s': %v", key, err)
-	}
-	defer keyfile.Close()
+		keyfile, err := os.Open(key)
+		if err != nil {
+			return nil, fmt.Errorf("Couldn't open file '%s': %v", key, err)
+		}
+		defer keyfile.Close()
 
-	if err := util.CheckPGP(bytes.NewReader(content), sigfile, keyfile); err != nil {
-		return nil, err
+		if err := util.CheckPGP(bytes.NewReader(content), sigfile, keyfile); err != nil {
+			return nil, err
+		}
 	}
 	return content, nil
 }
@@ -123,6 +125,20 @@
 		default:
 			return "", "", "", fmt.Errorf("Unsupported OS: %v", os)
 		}
+	case Version{17, 0, 0}:
+		switch os {
+		case "linux":
+			url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/clang+llvm-17.0.6-x86_64-linux-gnu-ubuntu-22.04.tar.xz"
+			return
+		case "darwin":
+			url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/clang+llvm-17.0.6-arm64-apple-darwin22.0.tar.xz"
+			return
+		case "windows":
+			url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.6/LLVM-17.0.6-win64.exe"
+			return
+		default:
+			return "", "", "", fmt.Errorf("Unsupported OS: %v", os)
+		}
 	default:
 		return "", "", "", fmt.Errorf("Unknown download for LLVM %v", v)
 	}