[llvm] r351804 - [X86] Add test for matchAddressRecursively's MUL handling
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 22 03:39:21 PST 2019
Author: rksimon
Date: Tue Jan 22 03:39:21 2019
New Revision: 351804
URL: http://llvm.org/viewvc/llvm-project?rev=351804&view=rev
Log:
[X86] Add test for matchAddressRecursively's MUL handling
Noticed in code coverage tests that this isn't tested.
Added:
llvm/trunk/test/CodeGen/X86/addr-mode-matcher-2.ll
Added: llvm/trunk/test/CodeGen/X86/addr-mode-matcher-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/addr-mode-matcher-2.ll?rev=351804&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/addr-mode-matcher-2.ll (added)
+++ llvm/trunk/test/CodeGen/X86/addr-mode-matcher-2.ll Tue Jan 22 03:39:21 2019
@@ -0,0 +1,73 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86
+; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
+
+; Test coverage for matchAddressRecursively's MUL handling
+
+; Based off:
+; struct A {
+; int m_ints[5];
+; int m_bar();
+; };
+; struct {
+; A* m_data;
+; } c;
+; void foo(bool b, int i) {
+; if (b)
+; return;
+; int j = c.m_data[i + 1].m_bar();
+; foo(false, j);
+; }
+
+%struct.A = type { [5 x i32] }
+
+define void @foo(i1 zeroext, i32) nounwind {
+; X86-LABEL: foo:
+; X86: # %bb.0:
+; X86-NEXT: movb {{[0-9]+}}(%esp), %al
+; X86-NEXT: testb %al, %al
+; X86-NEXT: je .LBB0_1
+; X86-NEXT: # %bb.3:
+; X86-NEXT: retl
+; X86-NEXT: .LBB0_1: # %.preheader
+; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
+; X86-NEXT: .p2align 4, 0x90
+; X86-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1
+; X86-NEXT: leal (%eax,%eax,4), %eax
+; X86-NEXT: leal 20(,%eax,4), %eax
+; X86-NEXT: pushl %eax
+; X86-NEXT: calll bar
+; X86-NEXT: addl $4, %esp
+; X86-NEXT: jmp .LBB0_2
+;
+; X64-LABEL: foo:
+; X64: # %bb.0:
+; X64-NEXT: pushq %rax
+; X64-NEXT: testl %edi, %edi
+; X64-NEXT: je .LBB0_1
+; X64-NEXT: # %bb.3:
+; X64-NEXT: popq %rax
+; X64-NEXT: retq
+; X64-NEXT: .LBB0_1: # %.preheader
+; X64-NEXT: movl %esi, %eax
+; X64-NEXT: .p2align 4, 0x90
+; X64-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1
+; X64-NEXT: incl %eax
+; X64-NEXT: cltq
+; X64-NEXT: shlq $2, %rax
+; X64-NEXT: leaq (%rax,%rax,4), %rdi
+; X64-NEXT: callq bar
+; X64-NEXT: jmp .LBB0_2
+ br i1 %0, label %9, label %3
+
+ %4 = phi i32 [ %8, %3 ], [ %1, %2 ]
+ %5 = add nsw i32 %4, 1
+ %6 = sext i32 %5 to i64
+ %7 = getelementptr inbounds %struct.A, %struct.A* null, i64 %6
+ %8 = tail call i32 @bar(%struct.A* %7)
+ br label %3
+
+ ret void
+}
+
+declare i32 @bar(%struct.A*)
More information about the llvm-commits
mailing list