1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test that constant offsets can be folded into global addresses. 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 6*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker@x = external global [0 x i32] 9*9880d681SAndroid Build Coastguard Worker@y = global [50 x i32] zeroinitializer 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; Test basic constant offsets of both defined and external symbols. 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test0: 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, x+188{{$}} 16*9880d681SAndroid Build Coastguard Worker; CHECK=NEXT: return $pop0{{$}} 17*9880d681SAndroid Build Coastguard Workerdefine i32* @test0() { 18*9880d681SAndroid Build Coastguard Worker ret i32* getelementptr ([0 x i32], [0 x i32]* @x, i32 0, i32 47) 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, y+188{{$}} 24*9880d681SAndroid Build Coastguard Worker; CHECK=NEXT: return $pop0{{$}} 25*9880d681SAndroid Build Coastguard Workerdefine i32* @test1() { 26*9880d681SAndroid Build Coastguard Worker ret i32* getelementptr ([50 x i32], [50 x i32]* @y, i32 0, i32 47) 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; Test zero offsets. 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, x{{$}} 34*9880d681SAndroid Build Coastguard Worker; CHECK=NEXT: return $pop0{{$}} 35*9880d681SAndroid Build Coastguard Workerdefine i32* @test2() { 36*9880d681SAndroid Build Coastguard Worker ret i32* getelementptr ([0 x i32], [0 x i32]* @x, i32 0, i32 0) 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, y{{$}} 42*9880d681SAndroid Build Coastguard Worker; CHECK=NEXT: return $pop0{{$}} 43*9880d681SAndroid Build Coastguard Workerdefine i32* @test3() { 44*9880d681SAndroid Build Coastguard Worker ret i32* getelementptr ([50 x i32], [50 x i32]* @y, i32 0, i32 0) 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; Test negative offsets. 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4: 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, x-188{{$}} 52*9880d681SAndroid Build Coastguard Worker; CHECK=NEXT: return $pop0{{$}} 53*9880d681SAndroid Build Coastguard Workerdefine i32* @test4() { 54*9880d681SAndroid Build Coastguard Worker ret i32* getelementptr ([0 x i32], [0 x i32]* @x, i32 0, i32 -47) 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5: 58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: .result i32{{$}} 59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, y-188{{$}} 60*9880d681SAndroid Build Coastguard Worker; CHECK=NEXT: return $pop0{{$}} 61*9880d681SAndroid Build Coastguard Workerdefine i32* @test5() { 62*9880d681SAndroid Build Coastguard Worker ret i32* getelementptr ([50 x i32], [50 x i32]* @y, i32 0, i32 -47) 63*9880d681SAndroid Build Coastguard Worker} 64