// RUN: %clang_cc1 -triple s390x-linux-gnu -target-cpu z14 -fzvector \ // RUN: -O -emit-llvm -o - -W -Wall -Werror %s | FileCheck %s volatile vector float ff, ff2; volatile vector bool int bi; void test_assign (void) { // CHECK-LABEL: test_assign // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: store volatile <4 x float> [[VAL]], <4 x float>* @ff ff = ff2; } void test_pos (void) { // CHECK-LABEL: test_pos // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: store volatile <4 x float> [[VAL]], <4 x float>* @ff ff = +ff2; } void test_neg (void) { // CHECK-LABEL: test_neg // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fsub <4 x float> , [[VAL]] ff = -ff2; } void test_preinc (void) { // CHECK-LABEL: test_preinc // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], ++ff2; } void test_postinc (void) { // CHECK-LABEL: test_postinc // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], ff2++; } void test_predec (void) { // CHECK-LABEL: test_predec // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], --ff2; } void test_postdec (void) { // CHECK-LABEL: test_postdec // CHECK: [[VAL:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fadd <4 x float> [[VAL]], ff2--; } void test_add (void) { // CHECK-LABEL: test_add // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fadd <4 x float> [[VAL1]], [[VAL2]] ff = ff + ff2; } void test_add_assign (void) { // CHECK-LABEL: test_add_assign // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: %{{.*}} = fadd <4 x float> [[VAL2]], [[VAL1]] ff += ff2; } void test_sub (void) { // CHECK-LABEL: test_sub // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fsub <4 x float> [[VAL1]], [[VAL2]] ff = ff - ff2; } void test_sub_assign (void) { // CHECK-LABEL: test_sub_assign // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: %{{.*}} = fsub <4 x float> [[VAL1]], [[VAL2]] ff -= ff2; } void test_mul (void) { // CHECK-LABEL: test_mul // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fmul <4 x float> [[VAL1]], [[VAL2]] ff = ff * ff2; } void test_mul_assign (void) { // CHECK-LABEL: test_mul_assign // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: %{{.*}} = fmul <4 x float> [[VAL2]], [[VAL1]] ff *= ff2; } void test_div (void) { // CHECK-LABEL: test_div // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: %{{.*}} = fdiv <4 x float> [[VAL1]], [[VAL2]] ff = ff / ff2; } void test_div_assign (void) { // CHECK-LABEL: test_div_assign // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: %{{.*}} = fdiv <4 x float> [[VAL1]], [[VAL2]] ff /= ff2; } void test_cmpeq (void) { // CHECK-LABEL: test_cmpeq // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[CMP:%[^ ]+]] = fcmp oeq <4 x float> [[VAL1]], [[VAL2]] // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32> bi = ff == ff2; } void test_cmpne (void) { // CHECK-LABEL: test_cmpne // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[CMP:%[^ ]+]] = fcmp une <4 x float> [[VAL1]], [[VAL2]] // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32> bi = ff != ff2; } void test_cmpge (void) { // CHECK-LABEL: test_cmpge // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[CMP:%[^ ]+]] = fcmp oge <4 x float> [[VAL1]], [[VAL2]] // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32> bi = ff >= ff2; } void test_cmpgt (void) { // CHECK-LABEL: test_cmpgt // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[CMP:%[^ ]+]] = fcmp ogt <4 x float> [[VAL1]], [[VAL2]] // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32> bi = ff > ff2; } void test_cmple (void) { // CHECK-LABEL: test_cmple // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[CMP:%[^ ]+]] = fcmp ole <4 x float> [[VAL1]], [[VAL2]] // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32> bi = ff <= ff2; } void test_cmplt (void) { // CHECK-LABEL: test_cmplt // CHECK: [[VAL1:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff // CHECK: [[VAL2:%[^ ]+]] = load volatile <4 x float>, <4 x float>* @ff2 // CHECK: [[CMP:%[^ ]+]] = fcmp olt <4 x float> [[VAL1]], [[VAL2]] // CHECK: %{{.*}} = sext <4 x i1> [[CMP]] to <4 x i32> bi = ff < ff2; }