175 lines · plain
1; RUN: llc -mcpu=mvp -filetype=obj %s -o %t.o2; RUN: yaml2obj %S/Inputs/globals.yaml -o %t_globals.o3; RUN: wasm-ld -print-gc-sections -o %t1.wasm %t.o %t_globals.o | \4; RUN: FileCheck %s -check-prefix=PRINT-GC5; PRINT-GC: removing unused section {{.*}}:(unused_function)6; PRINT-GC-NOT: removing unused section {{.*}}:(used_function)7; PRINT-GC: removing unused section {{.*}}:(.data.unused_data)8; PRINT-GC-NOT: removing unused section {{.*}}:(.data.used_data)9; PRINT-GC: removing unused section {{.*}}:(unused_global)10; PRINT-GC-NOT: removing unused section {{.*}}:(used_global)11 12target triple = "wasm32-unknown-unknown"13 14@unused_data = hidden global i64 1, align 415@used_data = hidden global i32 2, align 416 17define hidden i64 @unused_function(i64 %arg) {18 %1 = load i64, ptr @unused_data, align 419 ret i64 %120}21 22define hidden i32 @used_function() {23 %1 = load i32, ptr @used_data, align 424 ret i32 %125}26 27declare i64 @use_global()28 29define hidden void @_start() {30entry:31 call i32 @used_function()32 call i64 @use_global()33 ret void34}35 36; RUN: obj2yaml %t1.wasm | FileCheck %s37 38; CHECK: - Type: TYPE39; CHECK-NEXT: Signatures:40; CHECK-NEXT: - Index: 041; CHECK-NEXT: ParamTypes: []42; CHECK-NEXT: ReturnTypes:43; CHECK-NEXT: - I3244; CHECK-NEXT: - Index: 145; CHECK-NEXT: ParamTypes: []46; CHECK-NEXT: ReturnTypes: []47; CHECK-NEXT: - Index: 248; CHECK-NEXT: ParamTypes: []49; CHECK-NEXT: ReturnTypes:50; CHECK-NEXT: - I6451; CHECK-NEXT: - Type: FUNCTION52 53; CHECK: - Type: GLOBAL54; CHECK-NEXT: Globals:55; CHECK-NEXT: - Index: 056; CHECK-NEXT: Type: I3257; CHECK-NEXT: Mutable: true58; CHECK-NEXT: InitExpr:59; CHECK-NEXT: Opcode: I32_CONST60; CHECK-NEXT: Value: 6553661; CHECK-NEXT: - Index: 162; CHECK-NEXT: Type: I6463; CHECK-NEXT: Mutable: true64; CHECK-NEXT: InitExpr:65; CHECK-NEXT: Opcode: I64_CONST66; CHECK-NEXT: Value: 45667 68; CHECK: - Type: DATA69; CHECK-NEXT: Segments:70; CHECK-NEXT: - SectionOffset: 871; CHECK-NEXT: InitFlags: 072; CHECK-NEXT: Offset:73; CHECK-NEXT: Opcode: I32_CONST74; CHECK-NEXT: Value: 6553675; CHECK-NEXT: Content: '02000000'76; CHECK-NEXT: - Type: CUSTOM77; CHECK-NEXT: Name: name78; CHECK-NEXT: FunctionNames:79; CHECK-NEXT: - Index: 080; CHECK-NEXT: Name: used_function81; CHECK-NEXT: - Index: 182; CHECK-NEXT: Name: _start83; CHECK-NEXT: - Index: 284; CHECK-NEXT: Name: use_global85; CHECK-NEXT: GlobalNames:86; CHECK-NEXT: - Index: 087; CHECK-NEXT: Name: __stack_pointer88; CHECK-NEXT: - Index: 189; CHECK-NEXT: Name: used_global90; CHECK-NEXT: DataSegmentNames:91; CHECK-NEXT: - Index: 092; CHECK-NEXT: Name: .data93; CHECK-NEXT: ...94 95; RUN: wasm-ld -print-gc-sections --no-gc-sections -o %t1.no-gc.wasm \96; RUN: %t.o %t_globals.o97; RUN: obj2yaml %t1.no-gc.wasm | FileCheck %s -check-prefix=NO-GC98 99; NO-GC: - Type: TYPE100; NO-GC-NEXT: Signatures:101; NO-GC-NEXT: - Index: 0102; NO-GC-NEXT: ParamTypes: []103; NO-GC-NEXT: ReturnTypes: []104; NO-GC-NEXT: - Index: 1105; NO-GC-NEXT: ParamTypes:106; NO-GC-NEXT: - I64107; NO-GC-NEXT: ReturnTypes:108; NO-GC-NEXT: - I64109; NO-GC-NEXT: - Index: 2110; NO-GC-NEXT: ParamTypes: []111; NO-GC-NEXT: ReturnTypes:112; NO-GC-NEXT: - I32113; NO-GC-NEXT: - Index: 3114; NO-GC-NEXT: ParamTypes: []115; NO-GC-NEXT: ReturnTypes:116; NO-GC-NEXT: - I64117; NO-GC-NEXT: - Type: FUNCTION118 119; NO-GC: - Type: GLOBAL120; NO-GC-NEXT: Globals:121; NO-GC-NEXT: - Index: 0122; NO-GC-NEXT: Type: I32123; NO-GC-NEXT: Mutable: true124; NO-GC-NEXT: InitExpr:125; NO-GC-NEXT: Opcode: I32_CONST126; NO-GC-NEXT: Value: 65536127; NO-GC-NEXT: - Index: 1128; NO-GC-NEXT: Type: I64129; NO-GC-NEXT: Mutable: true130; NO-GC-NEXT: InitExpr:131; NO-GC-NEXT: Opcode: I64_CONST132; NO-GC-NEXT: Value: 123133; NO-GC-NEXT: - Index: 2134; NO-GC-NEXT: Type: I64135; NO-GC-NEXT: Mutable: true136; NO-GC-NEXT: InitExpr:137; NO-GC-NEXT: Opcode: I64_CONST138; NO-GC-NEXT: Value: 456139 140; NO-GC: - Type: DATA141; NO-GC-NEXT: Segments:142; NO-GC-NEXT: - SectionOffset: 8143; NO-GC-NEXT: InitFlags: 0144; NO-GC-NEXT: Offset:145; NO-GC-NEXT: Opcode: I32_CONST146; NO-GC-NEXT: Value: 65536147; NO-GC-NEXT: Content: '010000000000000002000000'148; NO-GC-NEXT: - Type: CUSTOM149; NO-GC-NEXT: Name: name150; NO-GC-NEXT: FunctionNames:151; NO-GC-NEXT: - Index: 0152; NO-GC-NEXT: Name: __wasm_call_ctors153; NO-GC-NEXT: - Index: 1154; NO-GC-NEXT: Name: unused_function155; NO-GC-NEXT: - Index: 2156; NO-GC-NEXT: Name: used_function157; NO-GC-NEXT: - Index: 3158; NO-GC-NEXT: Name: _start159; NO-GC-NEXT: - Index: 4160; NO-GC-NEXT: Name: use_global161; NO-GC-NEXT: GlobalNames:162; NO-GC-NEXT: - Index: 0163; NO-GC-NEXT: Name: __stack_pointer164; NO-GC-NEXT: - Index: 1165; NO-GC-NEXT: Name: unused_global166; NO-GC-NEXT: - Index: 2167; NO-GC-NEXT: Name: used_global168; NO-GC-NEXT: DataSegmentNames:169; NO-GC-NEXT: - Index: 0170; NO-GC-NEXT: Name: .data171; NO-GC-NEXT: ...172 173; RUN: not wasm-ld --gc-sections --relocatable -o %t1.no-gc.wasm %t.o 2>&1 | FileCheck %s -check-prefix=CHECK-ERROR174; CHECK-ERROR: error: -r and --gc-sections may not be used together175