xref: /aosp_15_r20/external/llvm/test/Bitcode/module_hash.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Check per module hash.
2*9880d681SAndroid Build Coastguard Worker; RUN: opt  -module-hash  %s -o - | llvm-bcanalyzer -dump | FileCheck %s --check-prefix=MOD1
3*9880d681SAndroid Build Coastguard Worker; MOD1: <HASH op0={{[0-9]*}} op1={{[0-9]*}} op2={{[0-9]*}} op3={{[0-9]*}} op4={{[0-9]*}} (match)/>
4*9880d681SAndroid Build Coastguard Worker; RUN: opt  -module-hash  %p/Inputs/module_hash.ll -o - | llvm-bcanalyzer -dump | FileCheck %s --check-prefix=MOD2
5*9880d681SAndroid Build Coastguard Worker; MOD2: <HASH op0={{[0-9]*}} op1={{[0-9]*}} op2={{[0-9]*}} op3={{[0-9]*}} op4={{[0-9]*}} (match)/>
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker; Check that the hash matches in the combined index.
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker; First regenerate the modules with a summary
10*9880d681SAndroid Build Coastguard Worker; RUN: opt  -module-hash -module-summary %s -o %t.m1.bc
11*9880d681SAndroid Build Coastguard Worker; RUN: opt  -module-hash -module-summary %p/Inputs/module_hash.ll -o %t.m2.bc
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; Recover the hashes from the modules themselves.
14*9880d681SAndroid Build Coastguard Worker; RUN: llvm-bcanalyzer -dump %t.m1.bc | grep '<HASH'  > %t.hash
15*9880d681SAndroid Build Coastguard Worker; RUN: llvm-bcanalyzer -dump %t.m2.bc | grep '<HASH'  >> %t.hash
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; Generate the combined index and gather the hashes there.
18*9880d681SAndroid Build Coastguard Worker; RUN: llvm-lto --thinlto-action=thinlink -o - %t.m1.bc %t.m2.bc | llvm-bcanalyzer -dump  | grep '<HASH ' >> %t.hash
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; Validate the output now, the hahes in the individual modules and the combined index are in the same file.
21*9880d681SAndroid Build Coastguard Worker; RUN: cat %t.hash | FileCheck %s --check-prefix=COMBINED
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; First capture the value of the hash for the two modules.
24*9880d681SAndroid Build Coastguard Worker; COMBINED: <HASH op0=[[HASH1_1:[0-9]*]] op1=[[HASH1_2:[0-9]*]] op2=[[HASH1_3:[0-9]*]] op3=[[HASH1_4:[0-9]*]] op4=[[HASH1_5:[0-9]*]] (match)/>
25*9880d681SAndroid Build Coastguard Worker; COMBINED: <HASH op0=[[HASH2_1:[0-9]*]] op1=[[HASH2_2:[0-9]*]] op2=[[HASH2_3:[0-9]*]] op3=[[HASH2_4:[0-9]*]] op4=[[HASH2_5:[0-9]*]] (match)/>
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; Validate against the value extracted from the combined index
28*9880d681SAndroid Build Coastguard Worker; COMBINED-DAG: <HASH abbrevid={{[0-9]*}} op0=[[HASH1_1]] op1=[[HASH1_2]] op2=[[HASH1_3]] op3=[[HASH1_4]] op4=[[HASH1_5]]/>
29*9880d681SAndroid Build Coastguard Worker; COMBINED-DAG: <HASH abbrevid={{[0-9]*}} op0=[[HASH2_1]] op1=[[HASH2_2]] op2=[[HASH2_3]] op3=[[HASH2_4]] op4=[[HASH2_5]]/>
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; Need a function for the combined index to be populated.
33*9880d681SAndroid Build Coastguard Workerdefine void @foo() {
34*9880d681SAndroid Build Coastguard Worker    ret void
35*9880d681SAndroid Build Coastguard Worker}
36