blob: edfaff03f83fd2e9a56cf0d300585839a3d0352d [file] [log] [blame]
// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.jasmin;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.jasmin.JasminBuilder.ClassFileVersion;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
public class Regress63598979 extends JasminTestBase {
@Test
public void testSimplifyIf() throws Exception {
JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
clazz.addStaticMethod("test1", ImmutableList.of("Z"), "Z",
".limit stack 2",
".limit locals 2",
" iload 0",
" ifne L2",
"L1:",
" iconst_1",
" goto L3",
"L2:",
" iconst_0",
"L3:",
" ireturn");
clazz.addStaticMethod("test2", ImmutableList.of("Z"), "Z",
".limit stack 2",
".limit locals 2",
" iload 0",
" ifne L2",
"L1:",
" iconst_0",
" goto L3",
"L2:",
" iconst_1",
"L3:",
" ireturn");
clazz.addStaticMethod("test3", ImmutableList.of("Z"), "Z",
".limit stack 2",
".limit locals 2",
" iload 0",
" ifeq L2",
"L1:",
" iconst_0",
" goto L3",
"L2:",
" iconst_1",
"L3:",
" ireturn");
clazz.addStaticMethod("test4", ImmutableList.of("Z"), "Z",
".limit stack 2",
".limit locals 2",
" iload 0",
" ifeq L2",
"L1:",
" iconst_1",
" goto L3",
"L2:",
" iconst_0",
"L3:",
" ireturn");
clazz.addMainMethod(
".limit stack 2",
".limit locals 1",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_0",
" invokestatic Test/test1(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_1",
" invokestatic Test/test1(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_0",
" invokestatic Test/test2(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_1",
" invokestatic Test/test2(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_0",
" invokestatic Test/test3(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_1",
" invokestatic Test/test3(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_0",
" invokestatic Test/test4(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_1",
" invokestatic Test/test4(Z)Z",
" invokestatic java/lang/Boolean/toString(Z)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" return");
String expected = runOnJava(builder, clazz.name);
String artResult = runOnArtD8(builder, clazz.name);
assertEquals(expected, artResult);
}
}