diff options
author | Björn Gustavsson <[email protected]> | 2010-04-22 13:37:18 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-05-11 08:54:26 +0200 |
commit | f39e0b6bbc5f5d9f6a55b87847bcad7707309883 (patch) | |
tree | 716d2cd1cfa00e1854ccba637484c8a7aec68919 /lib/compiler/test/receive_SUITE_data/ref_opt/no_1.erl | |
parent | 1d3148a8532b9319265fbe4107cdde81b554b3a2 (diff) | |
download | otp-f39e0b6bbc5f5d9f6a55b87847bcad7707309883.tar.gz otp-f39e0b6bbc5f5d9f6a55b87847bcad7707309883.tar.bz2 otp-f39e0b6bbc5f5d9f6a55b87847bcad7707309883.zip |
compiler test: Test optimization of receive statements
We don't attempt to run the generated code, but use beam_disasm
and check for the presence or absence (as appropriate) of the
recv_mark/1 and recv_set/1 instructions.
Diffstat (limited to 'lib/compiler/test/receive_SUITE_data/ref_opt/no_1.erl')
-rw-r--r-- | lib/compiler/test/receive_SUITE_data/ref_opt/no_1.erl | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lib/compiler/test/receive_SUITE_data/ref_opt/no_1.erl b/lib/compiler/test/receive_SUITE_data/ref_opt/no_1.erl new file mode 100644 index 0000000000..bc63dac437 --- /dev/null +++ b/lib/compiler/test/receive_SUITE_data/ref_opt/no_1.erl @@ -0,0 +1,99 @@ +-module(no_1). +-compile(export_all). + +?MODULE() -> + ok. + +f1(X) -> + Ref = make_ref(), + receive + _ when [X] =:= Ref -> + ok + end. + +f2(X, Y) -> + _Ref = make_ref(), + receive + _ when X =:= Y -> + ok + end. + +f3(X) -> + Ref = make_ref(), + receive + _ when X =:= Ref -> + ok + end. + +f4(X) -> + Ref = make_ref(), + receive + {X,_} when not X =:= Ref -> + ok + end. + +f5(X) -> + Ref = make_ref(), + receive + {Y,_} when X =:= Y; Y =:= Ref -> + ok + end. + +f6(X) -> + Ref = make_ref(), + receive + {Y,_} when Y =:= Ref; Ref =:= X -> + ok + end. + +f7(X) -> + Ref = make_ref(), + receive + {Y,_} when Y =:= Ref; not (X =:= Ref) -> + ok + end. + +f8(X) -> + Ref = make_ref(), + receive + {Y,_} when not (X =:= Ref); Y =:= Ref -> + ok + end. + +f9(X) -> + Ref = make_ref(), + receive + {Y,_} when (not (X =:= Ref)) or (Y =:= Ref) -> + ok + end. + +f10(X, Y) -> + Ref = make_ref(), + receive + {Z,_} when not (X =:= Y andalso Z =:= Ref) -> + ok + end. + +f11(X, Y) -> + Ref = make_ref(), + receive + {Z,_} when not ((X =:= Y) and (Z =:= Ref)) -> + ok + end. + +f12(X, Y) -> + Ref = make_ref(), + receive + {Z,_} when not ((Z =:= Ref) and (X =:= Y)) -> + ok + end. + +f13() -> + Ref = make_ref(), + RefCopy = id(Ref), + receive + _ when hd([RefCopy]) =:= Ref -> + ok + end. + +id(I) -> I. |