1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 13:11:39 +01:00
llvm-mirror/test/CodeGen/PowerPC/PR35812-neg-cmpxchg.ll
Jinsong Ji 94bc407832 [UpdateTestChecks][PowerPC] Avoid empty string when scrubbing loop comments
Summary:
SCRUB_LOOP_COMMENT_RE was introduced in https://reviews.llvm.org/D31285
This works for some loops.

However, we may generate lines with loop comments only.
And since we don't scrub leading white spaces, this will leave an empty
line there, and FileCheck will complain it.

eg: llvm/test/CodeGen/PowerPC/PR35812-neg-cmpxchg.ll:27:15:
error: found empty check string with prefix 'CHECK:'
; CHECK-NEXT:

This prevented us from using the `update_llc_test_checks.py` for quite some cases.

We should still keep the comment token there, so that we can safely
scrub the loop comment without breaking FileCheck.

Reviewers: timshen, hfinkel, lebedev.ri, RKSimon

Subscribers: nemanjai, jfb, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D63957

llvm-svn: 364775
2019-07-01 14:37:48 +00:00

167 lines
5.7 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; Make sure that a negative value for the compare-and-swap is zero extended
; from i8/i16 to i32 since it will be compared for equality.
; RUN: llc -mtriple=powerpc64le-linux-gnu -verify-machineinstrs < %s | FileCheck %s
; RUN: llc -mtriple=powerpc64le-linux-gnu -mcpu=pwr7 -verify-machineinstrs < %s | FileCheck %s --check-prefix=CHECK-P7
@str = private unnamed_addr constant [46 x i8] c"FAILED: __atomic_compare_exchange_n() failed.\00"
@str.1 = private unnamed_addr constant [59 x i8] c"FAILED: __atomic_compare_exchange_n() set the wrong value.\00"
@str.2 = private unnamed_addr constant [7 x i8] c"PASSED\00"
define signext i32 @main() {
; CHECK-LABEL: main:
; CHECK: # %bb.0: # %L.entry
; CHECK-NEXT: mflr 0
; CHECK-NEXT: std 0, 16(1)
; CHECK-NEXT: stdu 1, -48(1)
; CHECK-NEXT: .cfi_def_cfa_offset 48
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: li 3, -32477
; CHECK-NEXT: li 6, 234
; CHECK-NEXT: addi 5, 1, 46
; CHECK-NEXT: sth 3, 46(1)
; CHECK-NEXT: lis 3, 0
; CHECK-NEXT: ori 4, 3, 33059
; CHECK-NEXT: sync
; CHECK-NEXT: .LBB0_1: # %L.entry
; CHECK-NEXT: #
; CHECK-NEXT: lharx 3, 0, 5
; CHECK-NEXT: cmpw 4, 3
; CHECK-NEXT: bne 0, .LBB0_3
; CHECK-NEXT: # %bb.2: # %L.entry
; CHECK-NEXT: #
; CHECK-NEXT: sthcx. 6, 0, 5
; CHECK-NEXT: bne 0, .LBB0_1
; CHECK-NEXT: b .LBB0_4
; CHECK-NEXT: .LBB0_3: # %L.entry
; CHECK-NEXT: sthcx. 3, 0, 5
; CHECK-NEXT: .LBB0_4: # %L.entry
; CHECK-NEXT: cmplwi 3, 33059
; CHECK-NEXT: lwsync
; CHECK-NEXT: bne 0, .LBB0_7
; CHECK-NEXT: # %bb.5: # %L.B0000
; CHECK-NEXT: lhz 3, 46(1)
; CHECK-NEXT: cmplwi 3, 234
; CHECK-NEXT: bne 0, .LBB0_8
; CHECK-NEXT: # %bb.6: # %L.B0001
; CHECK-NEXT: addis 3, 2, .Lstr.2@toc@ha
; CHECK-NEXT: addi 3, 3, .Lstr.2@toc@l
; CHECK-NEXT: bl puts
; CHECK-NEXT: nop
; CHECK-NEXT: li 3, 0
; CHECK-NEXT: b .LBB0_10
; CHECK-NEXT: .LBB0_7: # %L.B0003
; CHECK-NEXT: addis 3, 2, .Lstr@toc@ha
; CHECK-NEXT: addi 3, 3, .Lstr@toc@l
; CHECK-NEXT: b .LBB0_9
; CHECK-NEXT: .LBB0_8: # %L.B0005
; CHECK-NEXT: addis 3, 2, .Lstr.1@toc@ha
; CHECK-NEXT: addi 3, 3, .Lstr.1@toc@l
; CHECK-NEXT: .LBB0_9: # %L.B0003
; CHECK-NEXT: bl puts
; CHECK-NEXT: nop
; CHECK-NEXT: li 3, 1
; CHECK-NEXT: .LBB0_10: # %L.B0003
; CHECK-NEXT: addi 1, 1, 48
; CHECK-NEXT: ld 0, 16(1)
; CHECK-NEXT: mtlr 0
; CHECK-NEXT: blr
;
; CHECK-P7-LABEL: main:
; CHECK-P7: # %bb.0: # %L.entry
; CHECK-P7-NEXT: mflr 0
; CHECK-P7-NEXT: std 0, 16(1)
; CHECK-P7-NEXT: stdu 1, -48(1)
; CHECK-P7-NEXT: .cfi_def_cfa_offset 48
; CHECK-P7-NEXT: .cfi_offset lr, 16
; CHECK-P7-NEXT: li 3, -32477
; CHECK-P7-NEXT: lis 5, 0
; CHECK-P7-NEXT: addi 4, 1, 46
; CHECK-P7-NEXT: li 7, 0
; CHECK-P7-NEXT: sth 3, 46(1)
; CHECK-P7-NEXT: li 6, 234
; CHECK-P7-NEXT: ori 5, 5, 33059
; CHECK-P7-NEXT: rlwinm 3, 4, 3, 27, 27
; CHECK-P7-NEXT: ori 7, 7, 65535
; CHECK-P7-NEXT: sync
; CHECK-P7-NEXT: slw 6, 6, 3
; CHECK-P7-NEXT: slw 8, 5, 3
; CHECK-P7-NEXT: slw 5, 7, 3
; CHECK-P7-NEXT: rldicr 4, 4, 0, 61
; CHECK-P7-NEXT: and 7, 6, 5
; CHECK-P7-NEXT: and 8, 8, 5
; CHECK-P7-NEXT: .LBB0_1: # %L.entry
; CHECK-P7-NEXT: #
; CHECK-P7-NEXT: lwarx 9, 0, 4
; CHECK-P7-NEXT: and 6, 9, 5
; CHECK-P7-NEXT: cmpw 6, 8
; CHECK-P7-NEXT: bne 0, .LBB0_3
; CHECK-P7-NEXT: # %bb.2: # %L.entry
; CHECK-P7-NEXT: #
; CHECK-P7-NEXT: andc 9, 9, 5
; CHECK-P7-NEXT: or 9, 9, 7
; CHECK-P7-NEXT: stwcx. 9, 0, 4
; CHECK-P7-NEXT: bne 0, .LBB0_1
; CHECK-P7-NEXT: b .LBB0_4
; CHECK-P7-NEXT: .LBB0_3: # %L.entry
; CHECK-P7-NEXT: stwcx. 9, 0, 4
; CHECK-P7-NEXT: .LBB0_4: # %L.entry
; CHECK-P7-NEXT: srw 3, 6, 3
; CHECK-P7-NEXT: lwsync
; CHECK-P7-NEXT: cmplwi 3, 33059
; CHECK-P7-NEXT: bne 0, .LBB0_7
; CHECK-P7-NEXT: # %bb.5: # %L.B0000
; CHECK-P7-NEXT: lhz 3, 46(1)
; CHECK-P7-NEXT: cmplwi 3, 234
; CHECK-P7-NEXT: bne 0, .LBB0_8
; CHECK-P7-NEXT: # %bb.6: # %L.B0001
; CHECK-P7-NEXT: addis 3, 2, .Lstr.2@toc@ha
; CHECK-P7-NEXT: addi 3, 3, .Lstr.2@toc@l
; CHECK-P7-NEXT: bl puts
; CHECK-P7-NEXT: nop
; CHECK-P7-NEXT: li 3, 0
; CHECK-P7-NEXT: b .LBB0_10
; CHECK-P7-NEXT: .LBB0_7: # %L.B0003
; CHECK-P7-NEXT: addis 3, 2, .Lstr@toc@ha
; CHECK-P7-NEXT: addi 3, 3, .Lstr@toc@l
; CHECK-P7-NEXT: b .LBB0_9
; CHECK-P7-NEXT: .LBB0_8: # %L.B0005
; CHECK-P7-NEXT: addis 3, 2, .Lstr.1@toc@ha
; CHECK-P7-NEXT: addi 3, 3, .Lstr.1@toc@l
; CHECK-P7-NEXT: .LBB0_9: # %L.B0003
; CHECK-P7-NEXT: bl puts
; CHECK-P7-NEXT: nop
; CHECK-P7-NEXT: li 3, 1
; CHECK-P7-NEXT: .LBB0_10: # %L.B0003
; CHECK-P7-NEXT: addi 1, 1, 48
; CHECK-P7-NEXT: ld 0, 16(1)
; CHECK-P7-NEXT: mtlr 0
; CHECK-P7-NEXT: blr
L.entry:
%value.addr = alloca i16, align 2
store i16 -32477, i16* %value.addr, align 2
%0 = cmpxchg i16* %value.addr, i16 -32477, i16 234 seq_cst seq_cst
%1 = extractvalue { i16, i1 } %0, 1
br i1 %1, label %L.B0000, label %L.B0003
L.B0003: ; preds = %L.entry
%puts = call i32 @puts(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @str, i64 0, i64 0))
ret i32 1
L.B0000: ; preds = %L.entry
%2 = load i16, i16* %value.addr, align 2
%3 = icmp eq i16 %2, 234
br i1 %3, label %L.B0001, label %L.B0005
L.B0005: ; preds = %L.B0000
%puts1 = call i32 @puts(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @str.1, i64 0, i64 0))
ret i32 1
L.B0001: ; preds = %L.B0000
%puts2 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @str.2, i64 0, i64 0))
ret i32 0
}
; Function Attrs: nounwind
declare i32 @puts(i8* nocapture readonly) #0