[llvm] r313483 - [GlobalISel][X86] Legalize i1 G_ADD/G_SUB/G_MUL/G_XOR/G_OR/G_AND instructions.
Igor Breger via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 17 04:34:17 PDT 2017
Author: ibreger
Date: Sun Sep 17 04:34:17 2017
New Revision: 313483
URL: http://llvm.org/viewvc/llvm-project?rev=313483&view=rev
Log:
[GlobalISel][X86] Legalize i1 G_ADD/G_SUB/G_MUL/G_XOR/G_OR/G_AND instructions.
Added:
llvm/trunk/test/CodeGen/X86/GlobalISel/sub-scalar.ll
Modified:
llvm/trunk/lib/Target/X86/X86LegalizerInfo.cpp
llvm/trunk/test/CodeGen/X86/GlobalISel/add-scalar.ll
llvm/trunk/test/CodeGen/X86/GlobalISel/and-scalar.ll
llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-add.mir
llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-and-scalar.mir
llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-mul-scalar.mir
llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-or-scalar.mir
llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-sub.mir
llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-xor-scalar.mir
llvm/trunk/test/CodeGen/X86/GlobalISel/or-scalar.ll
llvm/trunk/test/CodeGen/X86/GlobalISel/xor-scalar.ll
Modified: llvm/trunk/lib/Target/X86/X86LegalizerInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86LegalizerInfo.cpp?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86LegalizerInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86LegalizerInfo.cpp Sun Sep 17 04:34:17 2017
@@ -57,10 +57,13 @@ void X86LegalizerInfo::setLegalizerInfo3
setAction({G_PHI, s1}, WidenScalar);
- for (unsigned BinOp : {G_ADD, G_SUB, G_MUL, G_AND, G_OR, G_XOR})
+ for (unsigned BinOp : {G_ADD, G_SUB, G_MUL, G_AND, G_OR, G_XOR}) {
for (auto Ty : {s8, s16, s32})
setAction({BinOp, Ty}, Legal);
+ setAction({BinOp, s1}, WidenScalar);
+ }
+
for (unsigned Op : {G_UADDE}) {
setAction({Op, s32}, Legal);
setAction({Op, 1, s1}, Legal);
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/add-scalar.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/add-scalar.ll?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/add-scalar.ll (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/add-scalar.ll Sun Sep 17 04:34:17 2017
@@ -78,3 +78,26 @@ define i8 @test_add_i8(i8 %arg1, i8 %arg
%ret = add i8 %arg1, %arg2
ret i8 %ret
}
+
+define i32 @test_add_i1(i32 %arg1, i32 %arg2) {
+; X64-LABEL: test_add_i1:
+; X64: # BB#0:
+; X64-NEXT: cmpl %esi, %edi
+; X64-NEXT: sete %al
+; X64-NEXT: addb %al, %al
+; X64-NEXT: andl $1, %eax
+; X64-NEXT: retq
+;
+; X32-LABEL: test_add_i1:
+; X32: # BB#0:
+; X32-NEXT: movl 8(%esp), %eax
+; X32-NEXT: cmpl %eax, 4(%esp)
+; X32-NEXT: sete %al
+; X32-NEXT: addb %al, %al
+; X32-NEXT: andl $1, %eax
+; X32-NEXT: retl
+ %c = icmp eq i32 %arg1, %arg2
+ %x = add i1 %c , %c
+ %ret = zext i1 %x to i32
+ ret i32 %ret
+}
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/and-scalar.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/and-scalar.ll?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/and-scalar.ll (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/and-scalar.ll Sun Sep 17 04:34:17 2017
@@ -1,6 +1,20 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=ALL
+define i32 @test_and_i1(i32 %arg1, i32 %arg2) {
+; ALL-LABEL: test_and_i1:
+; ALL: # BB#0:
+; ALL-NEXT: cmpl %esi, %edi
+; ALL-NEXT: sete %al
+; ALL-NEXT: andb %al, %al
+; ALL-NEXT: andl $1, %eax
+; ALL-NEXT: retq
+ %c = icmp eq i32 %arg1, %arg2
+ %x = and i1 %c , %c
+ %ret = zext i1 %x to i32
+ ret i32 %ret
+}
+
define i8 @test_and_i8(i8 %arg1, i8 %arg2) {
; ALL-LABEL: test_and_i8:
; ALL: # BB#0:
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-add.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-add.mir?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-add.mir (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-add.mir Sun Sep 17 04:34:17 2017
@@ -1,16 +1,37 @@
# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X64
# RUN: llc -mtriple=i386-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=ALL --check-prefix=X32
--- |
- define void @test_add_i32() {
- ret void
- }
- define void @test_add_i64() {
- ret void
- }
+ define void @test_add_i1() { ret void}
+ define void @test_add_i32() { ret void }
+ define void @test_add_i64() { ret void }
...
---
+name: test_add_i1
+# CHECK-LABEL: name: test_add_i1
+alignment: 4
+legalized: false
+regBankSelected: false
+registers:
+ - { id: 0, class: _, preferred-register: '' }
+ - { id: 1, class: _, preferred-register: '' }
+ - { id: 2, class: _, preferred-register: '' }
+# CHECK: %0(s32) = COPY %edx
+# CHECK-NEXT: %3(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %4(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %5(s8) = G_ADD %3, %4
+# CHECK-NEXT: %2(s1) = G_TRUNC %5(s8)
+# CHECK-NEXT: RET 0
+body: |
+ bb.1 (%ir-block.0):
+
+ %0(s32) = COPY %edx
+ %1(s1) = G_TRUNC %0(s32)
+ %2(s1) = G_ADD %1, %1
+ RET 0
+...
+---
name: test_add_i32
# ALL-LABEL: name: test_add_i32
alignment: 4
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-and-scalar.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-and-scalar.mir?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-and-scalar.mir (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-and-scalar.mir Sun Sep 17 04:34:17 2017
@@ -1,6 +1,11 @@
# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s
--- |
+ define i1 @test_and_i1() {
+ %ret = and i1 undef, undef
+ ret i1 %ret
+ }
+
define i8 @test_and_i8() {
%ret = and i8 undef, undef
ret i8 %ret
@@ -23,6 +28,30 @@
...
---
+name: test_and_i1
+# CHECK-LABEL: name: test_and_i1
+alignment: 4
+legalized: false
+regBankSelected: false
+registers:
+ - { id: 0, class: _, preferred-register: '' }
+ - { id: 1, class: _, preferred-register: '' }
+ - { id: 2, class: _, preferred-register: '' }
+# CHECK: %0(s32) = COPY %edx
+# CHECK-NEXT: %3(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %4(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %5(s8) = G_AND %3, %4
+# CHECK-NEXT: %2(s1) = G_TRUNC %5(s8)
+# CHECK-NEXT: RET 0
+body: |
+ bb.1 (%ir-block.0):
+
+ %0(s32) = COPY %edx
+ %1(s1) = G_TRUNC %0(s32)
+ %2(s1) = G_AND %1, %1
+ RET 0
+...
+---
name: test_and_i8
# CHECK-LABEL: name: test_and_i8
alignment: 4
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-mul-scalar.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-mul-scalar.mir?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-mul-scalar.mir (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-mul-scalar.mir Sun Sep 17 04:34:17 2017
@@ -1,6 +1,8 @@
# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s
--- |
+ define void @test_mul_i1() { ret void}
+
define i16 @test_mul_i16(i16 %arg1, i16 %arg2) {
%ret = mul i16 %arg1, %arg2
ret i16 %ret
@@ -18,6 +20,30 @@
...
---
+name: test_mul_i1
+# CHECK-LABEL: name: test_mul_i1
+alignment: 4
+legalized: false
+regBankSelected: false
+registers:
+ - { id: 0, class: _, preferred-register: '' }
+ - { id: 1, class: _, preferred-register: '' }
+ - { id: 2, class: _, preferred-register: '' }
+# CHECK: %0(s32) = COPY %edx
+# CHECK-NEXT: %3(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %4(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %5(s8) = G_MUL %3, %4
+# CHECK-NEXT: %2(s1) = G_TRUNC %5(s8)
+# CHECK-NEXT: RET 0
+body: |
+ bb.1 (%ir-block.0):
+
+ %0(s32) = COPY %edx
+ %1(s1) = G_TRUNC %0(s32)
+ %2(s1) = G_MUL %1, %1
+ RET 0
+...
+---
name: test_mul_i16
# CHECK-LABEL: name: test_mul_i16
alignment: 4
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-or-scalar.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-or-scalar.mir?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-or-scalar.mir (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-or-scalar.mir Sun Sep 17 04:34:17 2017
@@ -1,6 +1,11 @@
# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s
--- |
+ define i1 @test_or_i1() {
+ %ret = or i1 undef, undef
+ ret i1 %ret
+ }
+
define i8 @test_or_i8() {
%ret = or i8 undef, undef
ret i8 %ret
@@ -23,6 +28,30 @@
...
---
+name: test_or_i1
+# CHECK-LABEL: name: test_or_i1
+alignment: 4
+legalized: false
+regBankSelected: false
+registers:
+ - { id: 0, class: _, preferred-register: '' }
+ - { id: 1, class: _, preferred-register: '' }
+ - { id: 2, class: _, preferred-register: '' }
+# CHECK: %0(s32) = COPY %edx
+# CHECK-NEXT: %3(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %4(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %5(s8) = G_OR %3, %4
+# CHECK-NEXT: %2(s1) = G_TRUNC %5(s8)
+# CHECK-NEXT: RET 0
+body: |
+ bb.1 (%ir-block.0):
+
+ %0(s32) = COPY %edx
+ %1(s1) = G_TRUNC %0(s32)
+ %2(s1) = G_OR %1, %1
+ RET 0
+...
+---
name: test_or_i8
# CHECK-LABEL: name: test_or_i8
alignment: 4
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-sub.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-sub.mir?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-sub.mir (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-sub.mir Sun Sep 17 04:34:17 2017
@@ -1,10 +1,8 @@
# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s
--- |
- ; ModuleID = '<stdin>'
- source_filename = "<stdin>"
- target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
- target triple = "x86_64--linux-gnu"
+
+ define void @test_sub_i1() { ret void}
define i32 @test_sub_i32(i32 %arg1, i32 %arg2) {
%ret = sub i32 %arg1, %arg2
@@ -13,23 +11,48 @@
...
---
+name: test_sub_i1
+# CHECK-LABEL: name: test_sub_i1
+alignment: 4
+legalized: false
+regBankSelected: false
+registers:
+ - { id: 0, class: _, preferred-register: '' }
+ - { id: 1, class: _, preferred-register: '' }
+ - { id: 2, class: _, preferred-register: '' }
+# CHECK: %0(s32) = COPY %edx
+# CHECK-NEXT: %3(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %4(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %5(s8) = G_SUB %3, %4
+# CHECK-NEXT: %2(s1) = G_TRUNC %5(s8)
+# CHECK-NEXT: RET 0
+body: |
+ bb.1 (%ir-block.0):
+
+ %0(s32) = COPY %edx
+ %1(s1) = G_TRUNC %0(s32)
+ %2(s1) = G_SUB %1, %1
+ RET 0
+...
+---
name: test_sub_i32
+# CHECK-LABEL: name: test_sub_i32
alignment: 4
legalized: false
regBankSelected: false
-selected: false
tracksRegLiveness: true
registers:
- { id: 0, class: _ }
- { id: 1, class: _ }
- { id: 2, class: _ }
+# CHECK: %0(s32) = COPY %edi
+# CHECK-NEXT: %1(s32) = COPY %esi
+# CHECK-NEXT: %2(s32) = G_SUB %0, %1
+# CHECK-NEXT: %eax = COPY %2(s32)
+# CHECK-NEXT: RET 0, implicit %eax
body: |
bb.1 (%ir-block.0):
liveins: %edi, %esi
- ; CHECK-LABEL: name: test_sub_i32
- ; CHECK: [[VAL1:%.*]](s32) = COPY %edi
- ; CHECK: [[VAL2:%.*]](s32) = COPY %esi
- ; CHECK: [[RES:%.*]](s32) = G_SUB [[VAL1:%.*]], [[VAL2:%.*]]
%0(s32) = COPY %edi
%1(s32) = COPY %esi
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-xor-scalar.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-xor-scalar.mir?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-xor-scalar.mir (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/legalize-xor-scalar.mir Sun Sep 17 04:34:17 2017
@@ -1,6 +1,11 @@
# RUN: llc -mtriple=x86_64-linux-gnu -global-isel -run-pass=legalizer %s -o - | FileCheck %s
--- |
+ define i1 @test_xor_i1() {
+ %ret = xor i1 undef, undef
+ ret i1 %ret
+ }
+
define i8 @test_xor_i8() {
%ret = xor i8 undef, undef
ret i8 %ret
@@ -23,6 +28,30 @@
...
---
+name: test_xor_i1
+# CHECK-LABEL: name: test_xor_i1
+alignment: 4
+legalized: false
+regBankSelected: false
+registers:
+ - { id: 0, class: _, preferred-register: '' }
+ - { id: 1, class: _, preferred-register: '' }
+ - { id: 2, class: _, preferred-register: '' }
+# CHECK: %0(s32) = COPY %edx
+# CHECK-NEXT: %3(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %4(s8) = G_TRUNC %0(s32)
+# CHECK-NEXT: %5(s8) = G_XOR %3, %4
+# CHECK-NEXT: %2(s1) = G_TRUNC %5(s8)
+# CHECK-NEXT: RET 0
+body: |
+ bb.1 (%ir-block.0):
+
+ %0(s32) = COPY %edx
+ %1(s1) = G_TRUNC %0(s32)
+ %2(s1) = G_XOR %1, %1
+ RET 0
+...
+---
name: test_xor_i8
# CHECK-LABEL: name: test_xor_i8
alignment: 4
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/or-scalar.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/or-scalar.ll?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/or-scalar.ll (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/or-scalar.ll Sun Sep 17 04:34:17 2017
@@ -1,6 +1,20 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=ALL
+define i32 @test_or_i1(i32 %arg1, i32 %arg2) {
+; ALL-LABEL: test_or_i1:
+; ALL: # BB#0:
+; ALL-NEXT: cmpl %esi, %edi
+; ALL-NEXT: sete %al
+; ALL-NEXT: orb %al, %al
+; ALL-NEXT: andl $1, %eax
+; ALL-NEXT: retq
+ %c = icmp eq i32 %arg1, %arg2
+ %x = or i1 %c , %c
+ %ret = zext i1 %x to i32
+ ret i32 %ret
+}
+
define i8 @test_or_i8(i8 %arg1, i8 %arg2) {
; ALL-LABEL: test_or_i8:
; ALL: # BB#0:
Added: llvm/trunk/test/CodeGen/X86/GlobalISel/sub-scalar.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/sub-scalar.ll?rev=313483&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/sub-scalar.ll (added)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/sub-scalar.ll Sun Sep 17 04:34:17 2017
@@ -0,0 +1,56 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=X64
+
+define i64 @test_sub_i64(i64 %arg1, i64 %arg2) {
+; X64-LABEL: test_sub_i64:
+; X64: # BB#0:
+; X64-NEXT: subq %rsi, %rdi
+; X64-NEXT: movq %rdi, %rax
+; X64-NEXT: retq
+ %ret = sub i64 %arg1, %arg2
+ ret i64 %ret
+}
+
+define i32 @test_sub_i32(i32 %arg1, i32 %arg2) {
+; X64-LABEL: test_sub_i32:
+; X64: # BB#0:
+; X64-NEXT: subl %esi, %edi
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
+ %ret = sub i32 %arg1, %arg2
+ ret i32 %ret
+}
+
+define i16 @test_sub_i16(i16 %arg1, i16 %arg2) {
+; X64-LABEL: test_sub_i16:
+; X64: # BB#0:
+; X64-NEXT: subw %si, %di
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
+ %ret = sub i16 %arg1, %arg2
+ ret i16 %ret
+}
+
+define i8 @test_sub_i8(i8 %arg1, i8 %arg2) {
+; X64-LABEL: test_sub_i8:
+; X64: # BB#0:
+; X64-NEXT: subb %sil, %dil
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
+ %ret = sub i8 %arg1, %arg2
+ ret i8 %ret
+}
+
+define i32 @test_sub_i1(i32 %arg1, i32 %arg2) {
+; X64-LABEL: test_sub_i1:
+; X64: # BB#0:
+; X64-NEXT: subb %sil, %dil
+; X64-NEXT: andl $1, %edi
+; X64-NEXT: movl %edi, %eax
+; X64-NEXT: retq
+ %a1 = trunc i32 %arg1 to i1
+ %a2 = trunc i32 %arg2 to i1
+ %x = sub i1 %a1 , %a2
+ %ret = zext i1 %x to i32
+ ret i32 %ret
+}
Modified: llvm/trunk/test/CodeGen/X86/GlobalISel/xor-scalar.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/GlobalISel/xor-scalar.ll?rev=313483&r1=313482&r2=313483&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/GlobalISel/xor-scalar.ll (original)
+++ llvm/trunk/test/CodeGen/X86/GlobalISel/xor-scalar.ll Sun Sep 17 04:34:17 2017
@@ -1,6 +1,20 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -verify-machineinstrs < %s -o - | FileCheck %s --check-prefix=ALL
+define i32 @test_xor_i1(i32 %arg1, i32 %arg2) {
+; ALL-LABEL: test_xor_i1:
+; ALL: # BB#0:
+; ALL-NEXT: cmpl %esi, %edi
+; ALL-NEXT: sete %al
+; ALL-NEXT: xorb %al, %al
+; ALL-NEXT: andl $1, %eax
+; ALL-NEXT: retq
+ %c = icmp eq i32 %arg1, %arg2
+ %x = xor i1 %c , %c
+ %ret = zext i1 %x to i32
+ ret i32 %ret
+}
+
define i8 @test_xor_i8(i8 %arg1, i8 %arg2) {
; ALL-LABEL: test_xor_i8:
; ALL: # BB#0:
More information about the llvm-commits
mailing list