brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 73d3a4a Raw
69 lines · plain
1; RUN: llc < %s --mtriple=wasm32-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s2; RUN: llc < %s --mtriple=wasm64-unknown-unknown -asm-verbose=false -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s3 4; Test that i1 extending loads and truncating stores are assembled properly.5 6; CHECK-LABEL: load_u_i1_i32:7; CHECK:      i32.load8_u $push[[NUM0:[0-9]+]]=, 0($0){{$}}8; CHECK-NEXT: return $pop[[NUM0]]{{$}}9define i32 @load_u_i1_i32(ptr %p) {10  %v = load i1, ptr %p11  %e = zext i1 %v to i3212  ret i32 %e13}14 15; CHECK-LABEL: load_s_i1_i32:16; CHECK:      i32.const $push[[NUM3:[0-9]+]]=, 0{{$}}17; CHECK-NEXT: i32.load8_u $push[[NUM0:[0-9]+]]=, 0($0){{$}}18; CHECK-NEXT: i32.const $push[[NUM1:[0-9]+]]=, 1{{$}}19; CHECK-NEXT: i32.and $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM1]]{{$}}20; CHECK-NEXT: i32.sub $push[[NUM4:[0-9]+]]=, $pop[[NUM3]], $pop[[NUM2]]{{$}}21; CHECK-NEXT: return $pop[[NUM4]]{{$}}22define i32 @load_s_i1_i32(ptr %p) {23  %v = load i1, ptr %p24  %e = sext i1 %v to i3225  ret i32 %e26}27 28; CHECK-LABEL: load_u_i1_i64:29; CHECK:      i64.load8_u $push[[NUM0:[0-9]+]]=, 0($0){{$}}30; CHECK-NEXT: return $pop[[NUM0]]{{$}}31define i64 @load_u_i1_i64(ptr %p) {32  %v = load i1, ptr %p33  %e = zext i1 %v to i6434  ret i64 %e35}36 37; CHECK-LABEL: load_s_i1_i64:38; CHECK:      i64.const $push[[NUM3:[0-9]+]]=, 0{{$}}39; CHECK-NEXT: i64.load8_u $push[[NUM0:[0-9]+]]=, 0($0){{$}}40; CHECK-NEXT: i64.const $push[[NUM1:[0-9]+]]=, 1{{$}}41; CHECK-NEXT: i64.and $push[[NUM2:[0-9]+]]=, $pop[[NUM0]], $pop[[NUM1]]{{$}}42; CHECK-NEXT: i64.sub $push[[NUM4:[0-9]+]]=, $pop[[NUM3]], $pop[[NUM2]]{{$}}43; CHECK-NEXT: return $pop[[NUM4]]{{$}}44define i64 @load_s_i1_i64(ptr %p) {45  %v = load i1, ptr %p46  %e = sext i1 %v to i6447  ret i64 %e48}49 50; CHECK-LABEL: store_i32_i1:51; CHECK:      i32.const $push[[NUM0:[0-9]+]]=, 1{{$}}52; CHECK-NEXT: i32.and $push[[NUM1:[0-9]+]]=, $1, $pop[[NUM0]]{{$}}53; CHECK-NEXT: i32.store8 0($0), $pop[[NUM1]]{{$}}54define void @store_i32_i1(ptr %p, i32 %v) {55  %t = trunc i32 %v to i156  store i1 %t, ptr %p57  ret void58}59 60; CHECK-LABEL: store_i64_i1:61; CHECK:      i64.const $push[[NUM0:[0-9]+]]=, 1{{$}}62; CHECK-NEXT: i64.and $push[[NUM1:[0-9]+]]=, $1, $pop[[NUM0]]{{$}}63; CHECK-NEXT: i64.store8 0($0), $pop[[NUM1]]{{$}}64define void @store_i64_i1(ptr %p, i64 %v) {65  %t = trunc i64 %v to i166  store i1 %t, ptr %p67  ret void68}69